Xác thực số điện thoại quốc tế php

Trong hướng dẫn này, bạn sẽ tìm hiểu về xác thực số điện thoại quốc tế bằng cách sử dụng lập trình PHP. Khi số điện thoại được lấy từ người dùng bằng cách sử dụng các trường biểu mẫu, nên xác thực giá trị số điện thoại bằng mã PHP. Ví dụ sau giải thích cách thực hiện đối với Số điện thoại quốc tế

Thí dụ

Xác thực số điện thoại quốc tế

Nhập số điện thoại của bạn Mã quốc gia
Mã vùng
Số điện thoại

Đối với đầu vào ở trên, thông báo lỗi được tạo như bên dưới

  • Lỗi Nhập mã ISD hợp lệ

  • Lỗi Nhập mã vùng hợp lệ

  • Lỗi Nhập số điện thoại hợp lệ

Sử dụng mã mẫu được cung cấp bên dưới trong trang thử nghiệm của bạn và tự mình thử

Mã PHP mẫu

// Kiểm tra xem việc gửi đã được thực hiện chưa
nếu(. isset($_POST["hidSubmit"])){

//Khai báo các biến cần thiết
$intisd="";
$intccode="";
$intphone="";
DisplayForm();
}
khác{

//Gán các giá trị đã nhập cho các biến để xác thực
$intisd=$_POST["txtisdcode"];
$intccode=$_POST["txtcitycode"];
$intphone=$_POST["txtphone"];

// Giá trị đã nhập được kiểm tra đúng định dạng
if(substr_count($intisd,"+")>0){
if(strpos($intisd,"+")==0)
$intisd=substr($intisd,1,strlen($intisd));
}
$result=ereg("^[0-9]+$",$intisd,$trashed);
$result=ereg("^[0-9]+$",$intisd,$trashed);
nếu(. ($result)){echo "Nhập ISDCODE hợp lệ";}
$result=ereg("^[0-9]+$",$intccode,$trashed);
nếu(. ($result)){echo "Nhập MÃ THÀNH PHỐ hợp lệ";}
$result=ereg("^[0-9]+$",$intphone,$trashed);
nếu(. ($result)){echo "Nhập số điện thoại hợp lệ";}
DisplayForm();
}

// Hàm do người dùng định nghĩa để hiển thị biểu mẫu trong trường hợp có lỗi
hàm DisplayForm(){
toàn cầu $intisd,$intccode,$intphone;
?>

Mã HTML cho biểu mẫu sau

Cắt 'n' Dán mã cho ví dụ trên

Tham khảo.

Vui lòng thích, +1, liên kết đến và chia sẻ tài nguyên SmartWebby này nếu bạn thấy nó hữu ích. Thanks

Thư viện PHP để phân tích cú pháp, định dạng, lưu trữ và xác thực số điện thoại quốc tế. Thư viện này dựa trên libphonenumber của Google

Cài đặt

Phiên bản PHP 5. 3 lên đến PHP 8. 1 hiện đang được hỗ trợ

Phần mở rộng mbstring PECL là bắt buộc

Nên sử dụng trình soạn thảo để cài đặt thư viện

$ composer require giggsey/libphonenumber-for-php

Bạn cũng có thể sử dụng bất kỳ trình tải tự động tuân thủ PSR-4 nào khác

Nếu bạn không sử dụng trình soạn thảo, hãy đảm bảo rằng bạn cũng tải bất kỳ phần phụ thuộc nào mà dự án này có, chẳng hạn như giggsey/locale

giggsey/libphonenumber-for-php-lite

Nếu bạn chỉ muốn đảm bảo chức năng PhoneNumber Util cốt lõi, bạn có thể sử dụng giggsey/libphonenumber-for-php-lite, cung cấp kích thước gói nhỏ hơn nhiều

Tài liệu

  • Số điện thoại sử dụng
  • Thông tin số ngắn
  • Số điện thoại Định vị địa lý
  • Số điện thoại để ánh xạ nhà cung cấp dịch vụ
  • Số điện thoại ánh xạ múi giờ
  • Đối sánh số điện thoại
  • Trình định dạng khi bạn nhập

Bản trình diễn trực tuyến

Bản trình diễn trực tuyến có sẵn và nguồn có thể được tìm thấy tại giggsey/libphonenumber-example

Điểm nổi bật về chức năng
  • Phân tích cú pháp/định dạng/xác thực số điện thoại cho tất cả các quốc gia/khu vực trên thế giới
  • $swissNumberStr = "044 668 18 00";
    $phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
    try {
        $swissNumberProto = $phoneUtil->parse($swissNumberStr, "CH");
        var_dump($swissNumberProto);
    } catch (\libphonenumber\NumberParseException $e) {
        var_dump($e);
    }
    1 - nhận loại số dựa trên chính số đó;
  • $swissNumberStr = "044 668 18 00";
    $phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
    try {
        $swissNumberProto = $phoneUtil->parse($swissNumberStr, "CH");
        var_dump($swissNumberProto);
    } catch (\libphonenumber\NumberParseException $e) {
        var_dump($e);
    }
    2 - nhận được mức độ tin cậy về việc liệu hai số có thể giống nhau hay không
  • $swissNumberStr = "044 668 18 00";
    $phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
    try {
        $swissNumberProto = $phoneUtil->parse($swissNumberStr, "CH");
        var_dump($swissNumberProto);
    } catch (\libphonenumber\NumberParseException $e) {
        var_dump($e);
    }
    3/
    $swissNumberStr = "044 668 18 00";
    $phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
    try {
        $swissNumberProto = $phoneUtil->parse($swissNumberStr, "CH");
        var_dump($swissNumberProto);
    } catch (\libphonenumber\NumberParseException $e) {
        var_dump($e);
    }
    4 - cung cấp số ví dụ hợp lệ cho tất cả các quốc gia/khu vực, với tùy chọn chỉ định loại số điện thoại ví dụ nào là cần thiết
  • $swissNumberStr = "044 668 18 00";
    $phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
    try {
        $swissNumberProto = $phoneUtil->parse($swissNumberStr, "CH");
        var_dump($swissNumberProto);
    } catch (\libphonenumber\NumberParseException $e) {
        var_dump($e);
    }
    5 - xác thực đầy đủ số điện thoại cho một khu vực sử dụng thông tin về độ dài và tiền tố
  • $swissNumberStr = "044 668 18 00";
    $phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
    try {
        $swissNumberProto = $phoneUtil->parse($swissNumberStr, "CH");
        var_dump($swissNumberProto);
    } catch (\libphonenumber\NumberParseException $e) {
        var_dump($e);
    }
    6 - cung cấp thông tin địa lý liên quan đến số điện thoại
  • $swissNumberStr = "044 668 18 00";
    $phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
    try {
        $swissNumberProto = $phoneUtil->parse($swissNumberStr, "CH");
        var_dump($swissNumberProto);
    } catch (\libphonenumber\NumberParseException $e) {
        var_dump($e);
    }
    7 - cung cấp thông tin múi giờ liên quan đến số điện thoại
  • $swissNumberStr = "044 668 18 00";
    $phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
    try {
        $swissNumberProto = $phoneUtil->parse($swissNumberStr, "CH");
        var_dump($swissNumberProto);
    } catch (\libphonenumber\NumberParseException $e) {
        var_dump($e);
    }
    8 - cung cấp thông tin nhà mạng liên quan đến số điện thoại

lập phiên bản

Thư viện này sẽ cố gắng tuân theo các số phiên bản giống như Google. Có thể có các bản phát hành bổ sung khi cần thiết để khắc phục các sự cố nghiêm trọng không thể đợi đến bản phát hành tiếp theo từ Google

Điều này không có nghĩa là dự án này có thể không tuân theo Phiên bản ngữ nghĩa mà thay vào đó là chính sách phiên bản của Google. Do đó, các bước nhảy trong các phiên bản chính có thể không thực sự chứa bất kỳ thay đổi không tương thích ngược nào. Vui lòng đọc ghi chú phát hành cho các bản phát hành đó

Google cố gắng phát hành các phiên bản của họ theo Phiên bản ngữ nghĩa, như được trình bày trong

Ví dụ nhanh

Giả sử bạn có một chuỗi đại diện cho một số điện thoại từ Thụy Sĩ. Đây là cách bạn phân tích/chuẩn hóa nó thành đối tượng PhoneNumber

$swissNumberStr = "044 668 18 00";
$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
try {
    $swissNumberProto = $phoneUtil->parse($swissNumberStr, "CH");
    var_dump($swissNumberProto);
} catch (\libphonenumber\NumberParseException $e) {
    var_dump($e);
}

Tại thời điểm này, swissNumberProto chứa

class libphonenumber\PhoneNumber#9 (7) {
 private $countryCode =>
  int(41)
 private $nationalNumber =>
  double(446681800)
 private $extension =>
  NULL
 private $italianLeadingZero =>
  NULL
 private $rawInput =>
  NULL
 private $countryCodeSource =>
  NULL
 private $preferredDomesticCarrierCode =>
  NULL
}

Bây giờ hãy để chúng tôi xác nhận xem số đó có hợp lệ không

$isValid = $phoneUtil->isValidNumber($swissNumberProto);
var_dump($isValid); // true

Có một vài định dạng được hỗ trợ bởi phương pháp định dạng, như minh họa bên dưới

// Produces "+41446681800"
echo $phoneUtil->format($swissNumberProto, \libphonenumber\PhoneNumberFormat::E164);

// Produces "044 668 18 00"
echo $phoneUtil->format($swissNumberProto, \libphonenumber\PhoneNumberFormat::NATIONAL);

// Produces "+41 44 668 18 00"
echo $phoneUtil->format($swissNumberProto, \libphonenumber\PhoneNumberFormat::INTERNATIONAL);

Bạn cũng có thể chọn định dạng số theo cách nó được gọi từ một quốc gia khác

// Produces "011 41 44 668 1800", the number when it is dialled in the United States.
echo $phoneUtil->formatOutOfCountryCallingNumber($swissNumberProto, "US");

// Produces "00 41 44 668 18 00", the number when it is dialled in Great Britain.
echo $phoneUtil->formatOutOfCountryCallingNumber($swissNumberProto, "GB");

mã hóa địa lý

$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();

$swissNumberProto = $phoneUtil->parse("044 668 18 00", "CH");
$usNumberProto = $phoneUtil->parse("+1 650 253 0000", "US");
$gbNumberProto = $phoneUtil->parse("0161 496 0000", "GB");

$geocoder = \libphonenumber\geocoding\PhoneNumberOfflineGeocoder::getInstance();

// Outputs "Zurich"
echo $geocoder->getDescriptionForNumber($swissNumberProto, "en_US");

// Outputs "Zürich"
echo $geocoder->getDescriptionForNumber($swissNumberProto, "de_DE");

// Outputs "Zurigo"
echo $geocoder->getDescriptionForNumber($swissNumberProto, "it_IT");

// Outputs "Mountain View, CA"
echo $geocoder->getDescriptionForNumber($usNumberProto, "en_US");

// Outputs "Mountain View, CA"
echo $geocoder->getDescriptionForNumber($usNumberProto, "de_DE");

// Outputs "미국" (Korean for United States)
echo $geocoder->getDescriptionForNumber($usNumberProto, "ko-KR");

// Outputs "Manchester"
echo $geocoder->getDescriptionForNumber($gbNumberProto, "en_GB");

// Outputs "영국" (Korean for United Kingdom)
echo $geocoder->getDescriptionForNumber($gbNumberProto, "ko-KR");

Số ngắnThông tin

$shortNumberInfo = \libphonenumber\ShortNumberInfo::getInstance();

// true
var_dump($shortNumberInfo->isEmergencyNumber("999", "GB"));

// true
var_dump($shortNumberInfo->connectsToEmergencyNumber("999", "GB"));

// false
var_dump($shortNumberInfo->connectsToEmergencyNumber("911", "GB"));

// true
var_dump($shortNumberInfo->isEmergencyNumber("911", "US"));

// true
var_dump($shortNumberInfo->connectsToEmergencyNumber("911", "US"));

// false
var_dump($shortNumberInfo->isEmergencyNumber("911123", "US"));

// true
var_dump($shortNumberInfo->connectsToEmergencyNumber("911123", "US"));

Ánh xạ số điện thoại đến nhà cung cấp dịch vụ

$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
$swissNumberProto = $phoneUtil->parse("798765432", "CH");

$carrierMapper = \libphonenumber\PhoneNumberToCarrierMapper::getInstance();
// Outputs "Swisscom"
echo $carrierMapper->getNameForNumber($swissNumberProto, "en");

Ánh xạ số điện thoại tới múi giờ

$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
$swissNumberProto = $phoneUtil->parse("798765432", "CH");

$timeZoneMapper = \libphonenumber\PhoneNumberToTimeZonesMapper::getInstance();
// returns array("Europe/Zurich")
$timeZones = $timeZoneMapper->getTimeZonesForNumber($swissNumberProto);

Câu hỏi thường gặp

Vấn đề với số không hợp lệ?

Thư viện này sử dụng siêu dữ liệu số điện thoại từ libphonenumber của Google. Nếu thư viện này hoạt động như dự định, nó sẽ cung cấp kết quả giống như phiên bản Java của dự án của Google

Nếu bạn cho rằng một số điện thoại đang trả về kết quả không chính xác, trước tiên hãy kiểm tra số điện thoại đó bằng libphonenumber qua Bản trình diễn trực tuyến của họ. Nếu điều đó trả về kết quả tương tự như dự án này và bạn cảm thấy đó là lỗi, hãy nêu vấn đề với dự án libphonenumber

Nếu Bản trình diễn trực tuyến của Google đưa ra kết quả khác với bản trình diễn libphonenumber-for-php, vui lòng nêu vấn đề tại đây

Đang tạo dữ liệu

Việc tạo dữ liệu thường không cần thiết, vì kho lưu trữ này thường sẽ luôn có siêu dữ liệu tối đa

Nếu bạn cần tạo dữ liệu, các lệnh được cung cấp bởi Phing. Đảm bảo bạn đã cài đặt tất cả các phụ thuộc của nhà soạn nhạc dev, sau đó chạy

$swissNumberStr = "044 668 18 00";
$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
try {
    $swissNumberProto = $phoneUtil->parse($swissNumberStr, "CH");
    var_dump($swissNumberProto);
} catch (\libphonenumber\NumberParseException $e) {
    var_dump($e);
}
0

Quá trình biên dịch này sao chép dự án libphonenumber ở phiên bản được chỉ định trong PHIÊN BẢN SIÊU DỮ LIỆU. txt

Làm cách nào để xác thực một số trong PHP?

Hàm is_numeric() kiểm tra xem một biến là số hay chuỗi số. Hàm này trả về true (1) nếu biến là số hoặc chuỗi số, ngược lại trả về false/không có gì.

Làm cách nào để xóa mã quốc gia khỏi số điện thoại trong PHP?

preg_replace('/\D/', '', ($phone)); php . thay thế trước .

Làm cách nào để định dạng số điện thoại trong PHP?

Định dạng số điện thoại sử dụng substr() . Để xử lý các định dạng số điện thoại khác nhau, bạn cần sử dụng biểu thức chính quy và hàm preg_replace().

Cách tốt nhất để xác thực số điện thoại là gì?

Các phương pháp hay nhất để xác thực số điện thoại .
Xác nhận rằng số điện thoại hợp lệ. .
Kiểm tra loại đường dây, bao gồm số điện thoại di động, điện thoại cố định và VoIP. .
Xây dựng danh sách cho phép mã quốc gia để chấp nhận. .
Duy trì một danh sách các nhà cung cấp dịch vụ dựa trên danh tiếng