Skip to content
This repository has been archived by the owner on Apr 14, 2021. It is now read-only.

Latest commit

 

History

History
140 lines (112 loc) · 3.32 KB

README.md

File metadata and controls

140 lines (112 loc) · 3.32 KB

DEPRECATED This repository is outdated for very long time. But this may give you an idea of what to do. Using with your own risks. For more complicated validation, I recommend to use https://github.com/giggsey/libphonenumber-for-php instead.

Code snippets dành cho việc nhận diện đầu số di động

Nhận diện số di động

Từ 15/11/2018, số di động chỉ có 10 số và bắt đầu bằng 03, 05, 07, 08, 09.

Regex để nhận diện số điện thoại dạng này là: /^0[0-9]{8}$/.

Thông thường số điện thoại thường được nhập với ký tự -, ., [Space] vì vậy cần loại bỏ những ký tự này trước khi nhận diện. Ví dụ (PHP):

<?php
$number = str_replace(array('-', '.', ' '), '', $number);
?>

Và sau đó nhận dạng regex:

<?php
// return false if number is not mobile number
if (!preg_match('/^0[0-9]{8}$/', $number)) return false;
?>

Nhận diện tên nhà mạng

Array chứa danh sách các nhà mạng (copy-paste):

<?php

$carriers_number = [
   '096' => 'Viettel',
   '097' => 'Viettel',
   '098' => 'Viettel',
   '032' => 'Viettel',
   '033' => 'Viettel',
   '034' => 'Viettel',
   '035' => 'Viettel',
   '036' => 'Viettel',
   '037' => 'Viettel',
   '038' => 'Viettel',
   '039' => 'Viettel',

   '090' => 'Mobifone',
   '093' => 'Mobifone',
   '070' => 'Mobifone',
   '071' => 'Mobifone',
   '072' => 'Mobifone',
   '076' => 'Mobifone',
   '078' => 'Mobifone',

   '091' => 'Vinaphone',
   '094' => 'Vinaphone',
   '083' => 'Vinaphone',
   '084' => 'Vinaphone',
   '085' => 'Vinaphone',
   '087' => 'Vinaphone',
   '089' => 'Vinaphone',

   '099' => 'Gmobile',

   '092' => 'Vietnamobile',
   '056' => 'Vietnamobile',
   '058' => 'Vietnamobile',

   '095'  => 'SFone'
];

?>

Kiểm tra 1 string có bắt đầu bằng 1 string khác hay không:

<?php

/**
 * Check if a string is started with another string
 *
 * @param string $needle The string being searched for.
 * @param string $haystack The string being searched
 * @return bool true if $haystack is started with $needle
 */
function start_with($needle, $haystack) {
    $length = strlen($needle);
    return (substr($haystack, 0, $length) === $needle);
}

?>

OK, bắt đầu search:

<?php

/**
 * Detect carrier name by phone number
 *
 * @param string $number The input phone number
 * @return bool Name of the carrier, false if not found
 */
function detect_number ($number) {
    $number = str_replace(array('-', '.', ' '), '', $number);

    // $number is not a phone number
    if (!preg_match('/^0[0-9]{8}$/', $number)) return false;

    // Store all start number in an array to search
    $start_numbers = array_keys($GLOBALS["carriers_number"]);

    foreach ($start_numbers as $start_number) {
        // if $start number found in $number then return value of $carriers_number array as carrier name
        if (start_with($start_number, $number)) {
            return $GLOBALS["carriers_number"][$start_number];
        }
    }

    // if not found, return false
    return false;
}

?>

Done. Kết quả mong đợi là:

<?php

$number = '0987654321';
$carrier = detect_number($number);
echo $carrier // Viettel

$wrong_number = '9876543210';
$carrier = detect_number($wrong_number);
echo $carrier; // false

?>

Hope this help.