Skip to content
 
 

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 

Repository files navigation

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

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

Số di động có 2 dạng:

  • 10 số: bắt đầu bằng 09
  • 11 số: bắt đầu bằng 012, 016, 018, 019;

Regex để nhận diện số điện thoại dạng này là: /^(01[2689]|09)[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):

$number = str_replace(array('-', '.', ' '), '', $number);

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

// return false if number is not mobile number
if (!preg_match('/^(01[2689]|09)[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):

$carriers_number = array(
    '096'  => 'Viettel',
    '097'  => 'Viettel',
    '098'  => 'Viettel',
    '0162' => 'Viettel',
    '0163' => 'Viettel',
    '0164' => 'Viettel',
    '0165' => 'Viettel',
    '0166' => 'Viettel',
    '0167' => 'Viettel',
    '0168' => 'Viettel',
    '0169' => 'Viettel',

    '090'  => 'Mobifone',
    '093'  => 'Mobifone',
    '0120' => 'Mobifone',
    '0121' => 'Mobifone',
    '0122' => 'Mobifone',
    '0126' => 'Mobifone',
    '0128' => 'Mobifone',

    '091'  => 'Vinaphone',
    '094'  => 'Vinaphone',
    '0123' => 'Vinaphone',
    '0124' => 'Vinaphone',
    '0125' => 'Vinaphone',
    '0127' => 'Vinaphone',
    '0129' => 'Vinaphone',

    '0993' => 'Gmobile',
    '0994' => 'Gmobile',
    '0995' => 'Gmobile',
    '0996' => 'Gmobile',
    '0997' => 'Gmobile',
    '0199' => 'Gmobile',

    '092'  => 'Vietnamobile',
    '0186' => 'Vietnamobile',
    '0188' => 'Vietnamobile',

    '095'  => 'SFone'
);

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

/*
 * 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 (boolean) 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:

/*
 * Detect carrier name by phone number
 *
 * @param (string) ($number) The input phone number
 * @return (mixed) 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('/^(01[2689]|09)[0-9]{8}$/', $number)) return false;

    // Store all start number in an array to search
    $start_numbers = array_keys($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 $carriers_number[$start_number];
        }
    }

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

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

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

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

Hope this help.

About

Detect Vietnamese mobile carrier by phone number

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages