Home  >  Article  >  Backend Development  >  How to use PHP regular expressions to verify whether the input string is in the correct ID number, passport number or military ID number format

How to use PHP regular expressions to verify whether the input string is in the correct ID number, passport number or military ID number format

WBOY
WBOYOriginal
2023-06-24 09:30:061007browse

In websites or applications, we often need to verify the information entered by the user, among which ID number, passport number and military ID number are common verification objects. In PHP, regular expressions are a very handy tool that can be used to verify that the input string is well-formed. This article will introduce how to use PHP regular expressions to verify the format of ID number, passport number and military ID number.

  1. Verify ID card number format

The ID number is 18 or 15 digits, and the last digit of the 18-digit ID number may be a number or the letter X. The following is the PHP code to verify the format of the ID number:

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

The code first calls different verification functions according to the length of the ID number. The function to verify the 18-digit ID number checkIDCard18($idcard) uses the regular expression /^d{17}(d|x)$/i, which matches 18 digit header and optional number or letter X. If the match is successful, the function continues to verify whether the date of birth of the ID number is correct, and obtains the ID verification code and compares it with the last digit or letter X. Function to verify the 15-digit ID number checkIDCard15($idcard) First convert it into an 18-digit ID number and then call the checkIDCard18($idcard) function for verification.

  1. Verify passport number format

The passport number format is fixed, consisting of 1 uppercase letter and 6-9 digits. The following is the PHP code to verify the format of the passport number:

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

This code uses the regular expression /^[a-zA-Z]d{6,9}$/i, the regular expression The expression matches a string that begins with an uppercase letter and is followed by 6 to 9 digits.

  1. Verify the military ID number format

The military ID number is a combination of 10 to 18 digits and letters, of which the 10th to 16th digits are numbers, and the 17th Bits can be numbers or letters. The following is the PHP code that verifies the format of the military ID number:

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

This code uses the regular expression /^w{9,17}$/i, which matches 9 to 17 A string of digits and letters. If the match is successful, the function continues to verify whether the 10th to 16th digits of the military ID number are numbers, and whether the 17th digit is a number or letter.

Summary

This article introduces how to use PHP regular expressions to verify the format of ID number, passport number and military ID number. Regular expressions can be used to effectively verify whether the format of user input information meets the requirements. In particular, the verification of ID card numbers requires calling different verification functions based on different digits, including verifying date of birth and generating verification codes. However, while verifying information, user privacy should be protected.

The above is the detailed content of How to use PHP regular expressions to verify whether the input string is in the correct ID number, passport number or military ID number format. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn