Skip to content

jamesnguyen101/Vietnamese-mobile-carrier

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 

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

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • PHP 100.0%