Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan ungkapan biasa PHP untuk mengesahkan sama ada rentetan input berada dalam format nombor ID, nombor pasport atau nombor ID tentera yang betul

Cara menggunakan ungkapan biasa PHP untuk mengesahkan sama ada rentetan input berada dalam format nombor ID, nombor pasport atau nombor ID tentera yang betul

WBOY
WBOYasal
2023-06-24 09:30:061054semak imbas

Dalam laman web atau aplikasi, kami selalunya perlu mengesahkan maklumat yang dimasukkan oleh pengguna, antaranya nombor ID, nombor pasport dan nombor ID tentera adalah objek pengesahan biasa. Dalam PHP, ungkapan biasa ialah alat yang sangat mudah yang boleh digunakan untuk mengesahkan bahawa rentetan input terbentuk dengan baik. Artikel ini akan memperkenalkan cara menggunakan ungkapan biasa PHP untuk mengesahkan format nombor ID, nombor pasport dan nombor ID tentera.

  1. Sahkan format nombor ID

Nombor ID ialah 18 atau 15 digit, dan digit terakhir nombor ID 18 digit mungkin nombor atau huruf X . Berikut ialah kod PHP untuk mengesahkan format nombor ID:

function checkIDCard($idcard){
    if(strlen($idcard)==18){
        return checkIDCard18($idcard);
    }elseif(strlen($idcard)==15){
        $idcard = idcardPro18to15($idcard);
        return checkIDCard15($idcard);
    }else{
        return false;
    }
}

// 验证18位身份证号码
function checkIDCard18($idcard){
    $regx = "/^d{17}(d|x)$/i";
    if(preg_match($regx, $idcard)){
        $idcard = strtoupper($idcard);
        $idcard_year = intval(substr($idcard,6,4));
        $idcard_month = intval(substr($idcard,10,2));
        $idcard_day = intval(substr($idcard,12,2));
        if(checkdate($idcard_month, $idcard_day, $idcard_year)){
            $idcard_base = substr($idcard, 0, 17);
            if(getVerifyBit($idcard_base) == substr($idcard, 17, 1)){
                return true;
            }
        }
    }
    return false;
}

// 验证15位身份证号码
function checkIDCard15($idcard){
    $regx = "/^d{15}$/i";
    if(preg_match($regx, $idcard)){
        $idcard = idcardPro15to18($idcard);
        return checkIDCard18($idcard);
    }else{
        return false;
    }
}

// 获取身份证校验码
function getVerifyBit($idcard_base){
    if(strlen($idcard_base)!= 17){
        return false;
    }
    $factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
    $verify_number_list = array('1','0','x','9','8','7','6','5','4','3','2');
    $checksum = 0;
    for($i = 0;$i < strlen($idcard_base);$i++){
        $checksum += substr($idcard_base, $i, 1) * $factor[$i];
    }
    $mod = $checksum % 11;
    $verify_number = $verify_number_list[$mod];
    return $verify_number;
}

// 将15位身份证号码转成18位
function idcardPro15to18($idcard){
    if(strlen($idcard)!=15){
        return false;
    }else{
        $year = '19' . substr($idcard, 6, 2);
        $month = substr($idcard, 8, 2);
        $day = substr($idcard, 10, 2);
        $idcard = substr_replace($idcard, $year, 6, 2);
        $idcard = substr_replace($idcard, $month, 8, 2);
        $idcard = substr_replace($idcard, $day, 10, 2);
        return $idcard;
    }
}

// 将18位身份证号码转成15位
function idcardPro18to15($idcard){
    if(strlen($idcard)!=18){
        return false;
    }else{
        $idcard = substr($idcard,0,6) . substr($idcard,8,9);
        return $idcard;
    }
}

Kod mula-mula memanggil fungsi pengesahan yang berbeza berdasarkan panjang nombor ID. Fungsi checkIDCard18($idcard) yang mengesahkan nombor ID 18 digit menggunakan ungkapan biasa /^d{17}(d|x)$/i, yang sepadan dengan pengepala 18 digit dan nombor pilihan atau huruf X. Jika perlawanan itu berjaya, fungsi terus mengesahkan sama ada tarikh lahir nombor ID adalah betul, dan mendapatkan kod pengesahan ID dan membandingkannya dengan digit terakhir atau huruf X. Fungsi untuk mengesahkan nombor ID 15 digit checkIDCard15($idcard) mula-mula menukarnya kepada nombor ID 18 digit dan kemudian memanggil fungsi checkIDCard18($idcard) untuk pengesahan.

  1. Sahkan format nombor pasport

Format nombor pasport adalah tetap iaitu 1 huruf besar + 6-9 digit. Berikut ialah kod PHP untuk mengesahkan format nombor pasport:

function checkPassport($passport){
    $regx = "/^[a-zA-Z]d{6,9}$/i";
    if(preg_match($regx, $passport)){
        return true;
    }else{
        return false;
    }
}

Kod ini menggunakan ungkapan biasa /^[a-zA-Z]d{6,9}$/i, yang sepadan dengan rentetan yang bermula dengan huruf besar dan diikuti dengan 6 hingga 9 digit.

  1. Sahkan format nombor ID tentera

Nombor ID tentera ialah gabungan 10 hingga 18 digit dan huruf, yang mana digit ke-10 hingga ke-16 adalah nombor, dan Bit ke-17 boleh menjadi nombor atau huruf. Di bawah ialah kod PHP yang mengesahkan format nombor ID tentera:

function checkOfficerCard($officercard){
    $regx = "/^w{9,17}$/i";
    if(preg_match($regx, $officercard)){
        if(ctype_digit(substr($officercard, 9, 7))){
            return true;
        }elseif(ctype_digit(substr($officercard, 9, 6)) && ctype_alpha(substr($officercard, 16, 1))){
            return true;
        }else{
            return false;
        }
    }else{
        return false;
    }
}

Kod ini menggunakan ungkapan biasa /^w{9,17}$/i, yang sepadan dengan rentetan gabungan nombor dan huruf dari 9 hingga 17 digit. Jika perlawanan itu berjaya, fungsi itu terus mengesahkan sama ada digit ke-10 hingga ke-16 nombor ID tentera ialah nombor dan sama ada digit ke-17 ialah nombor atau huruf.

Ringkasan

Artikel ini memperkenalkan cara menggunakan ungkapan biasa PHP untuk mengesahkan format nombor ID, nombor pasport dan nombor ID tentera. Ungkapan biasa boleh digunakan untuk mengesahkan dengan berkesan sama ada format maklumat input pengguna memenuhi keperluan. Khususnya, pengesahan nombor kad pengenalan memerlukan memanggil fungsi pengesahan yang berbeza berdasarkan digit yang berbeza, termasuk mengesahkan tarikh lahir dan menjana kod pengesahan. Walau bagaimanapun, semasa mengesahkan maklumat, privasi pengguna harus dilindungi.

Atas ialah kandungan terperinci Cara menggunakan ungkapan biasa PHP untuk mengesahkan sama ada rentetan input berada dalam format nombor ID, nombor pasport atau nombor ID tentera yang betul. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn