Maison  >  Article  >  développement back-end  >  Comment utiliser des expressions régulières PHP pour vérifier si la chaîne d'entrée est au bon format de numéro d'identification, de passeport ou de numéro d'identification militaire

Comment utiliser des expressions régulières PHP pour vérifier si la chaîne d'entrée est au bon format de numéro d'identification, de passeport ou de numéro d'identification militaire

WBOY
WBOYoriginal
2023-06-24 09:30:061059parcourir

Dans les sites Web ou les applications, nous avons souvent besoin de vérifier les informations saisies par les utilisateurs, parmi lesquelles le numéro d'identification, le numéro de passeport et le numéro d'identification militaire sont des objets de vérification courants. En PHP, les expressions régulières sont un outil très pratique qui peut être utilisé pour vérifier que la chaîne d'entrée est bien formée. Cet article explique comment utiliser les expressions régulières PHP pour vérifier le format du numéro d'identification, du numéro de passeport et du numéro d'identification militaire.

  1. Vérifiez le format du numéro de carte d'identité

Le numéro d'identification est composé de 18 ou 15 chiffres, et le dernier chiffre du numéro d'identification à 18 chiffres peut être un chiffre ou la lettre X. Voici le code PHP pour vérifier le format du numéro d'identification :

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;
    }
}

Le code appelle d'abord différentes fonctions de vérification en fonction de la longueur du numéro d'identification. La fonction checkIDCard18($idcard) qui vérifie le numéro de carte d'identité à 18 chiffres utilise l'expression régulière /^d{17}(d|x)$/i. expression régulière La formule correspond à un nombre à 18 chiffres et à un chiffre ou une lettre facultative X. Si la correspondance réussit, la fonction continue de vérifier si la date de naissance du numéro d'identification est correcte, obtient le code de vérification d'identité et le compare avec le dernier chiffre ou la lettre X. La fonction de vérification du numéro de carte d'identité à 15 chiffres checkIDCard15($idcard) le convertit d'abord en un numéro de carte d'identité à 18 chiffres, puis appelle le checkIDCard18($idcard) fonction de vérification. checkIDCard18($idcard) 使用了正则表达式 /^d{17}(d|x)$/i,该正则表达式匹配18位数字头和可选的数字或字母 X。如果匹配成功,函数继续验证身份证号码的出生日期是否正确,以及获取身份证校验码,并与最后一位数字或字母 X 进行比较。验证15位身份证号码的函数 checkIDCard15($idcard) 首先将其转换为18位身份证号码再调用 checkIDCard18($idcard) 函数进行验证。

  1. 验证护照号码格式

护照号码格式是固定的,为1位大写字母+6-9位数字。下面是验证护照号码格式的PHP代码:

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

该代码使用正则表达式 /^[a-zA-Z]d{6,9}$/i,该正则表达式匹配以一个大写字母开头,后面6至9位为数字的字符串。

  1. 验证军官证号码格式

军官证号码为10至18位数字和字母的组合,其中第10位至第16位为数字,第17位可以为数字或字母。下面是验证军官证号码格式的PHP代码:

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;
    }
}

该代码使用正则表达式 /^w{9,17}$/i

    Vérifier le format du numéro de passeport

    Le format du numéro de passeport est fixe, soit 1 lettre majuscule + 6 à 9 chiffres. Vous trouverez ci-dessous le code PHP qui vérifie le format du numéro de passeport :

    rrreee🎜Le code utilise l'expression régulière /^[a-zA-Z]d{6,9}$/i, qui correspond à A chaîne commençant par une lettre majuscule et suivie de 6 à 9 chiffres. 🎜
      🎜Vérifiez le format du numéro d'identification militaire🎜🎜🎜Le numéro d'identification militaire est une combinaison de 10 à 18 chiffres et lettres, dont les 10e à 16e chiffres sont des chiffres, et le 17e chiffre peut être un chiffre ou une lettre. Vous trouverez ci-dessous le code PHP qui vérifie le format du numéro d'identification militaire : 🎜rrreee🎜Le code utilise l'expression régulière /^w{9,17}$/i, qui correspond à 9 à 17 chiffres et une chaîne de lettres. Si la correspondance réussit, la fonction continue de vérifier si les 10e à 16e chiffres du numéro d'identification militaire sont des chiffres et si le 17e chiffre est un chiffre ou une lettre. 🎜🎜Résumé🎜🎜Cet article explique comment utiliser les expressions régulières PHP pour vérifier le format du numéro d'identification, du numéro de passeport et du numéro d'identification militaire. Les expressions régulières peuvent être utilisées pour vérifier efficacement si le format des informations saisies par l'utilisateur répond aux exigences. En particulier, la vérification des numéros de carte d'identité nécessite d'appeler différentes fonctions de vérification basées sur différents chiffres, notamment la vérification de la date de naissance et la génération de codes de vérification. Cependant, lors de la vérification des informations, la confidentialité des utilisateurs doit être protégée. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn