>  기사  >  백엔드 개발  >  PHP 정규식을 사용하여 입력 문자열이 ID 번호, 여권 번호 또는 군인 ID 번호의 올바른 형식인지 확인하는 방법

PHP 정규식을 사용하여 입력 문자열이 ID 번호, 여권 번호 또는 군인 ID 번호의 올바른 형식인지 확인하는 방법

WBOY
WBOY원래의
2023-06-24 09:30:061052검색

웹사이트나 애플리케이션에서는 사용자가 입력한 정보를 확인해야 하는 경우가 많으며, 그 중 주민등록번호, 여권번호, 군인증 번호가 일반적인 확인 대상입니다. PHP에서 정규식은 입력 문자열이 올바른 형식인지 확인하는 데 사용할 수 있는 매우 편리한 도구입니다. 이 글에서는 PHP 정규식을 사용하여 주민등록번호, 여권번호, 군인증 번호의 형식을 확인하는 방법을 소개합니다.

  1. 신분증 번호 형식 확인

신분증 번호는 18자리 또는 15자리이며, 18자리 신분증 번호의 마지막 자리는 숫자 또는 문자 X일 수 있습니다. 다음은 ID 번호의 형식을 확인하는 PHP 코드입니다.

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

코드는 먼저 ID 번호의 길이에 따라 다양한 확인 함수를 호출합니다. 18자리 신분증 번호를 확인하는 checkIDCard18($idcard) 함수는 정규식 /^d{17}(d|x)$/i를 사용합니다. 정규식 수식은 18자리 숫자와 선택적 숫자 또는 문자 X와 일치합니다. 일치에 성공하면 해당 기능은 계속해서 ID 번호의 생년월일이 올바른지 확인하고 ID 확인 코드를 획득하여 마지막 숫자 또는 문자 X와 비교합니다. 15자리 신분증번호 checkIDCard15($idcard)를 확인하는 기능은 먼저 이를 18자리 신분증번호로 변환한 후 checkIDCard18($idcard)를 호출합니다. 확인을 위한 기능입니다. 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

    여권 번호 형식 확인

    여권 번호 형식은 대문자 1개 + 6~9자리로 고정되어 있습니다. 다음은 여권 번호 형식을 확인하는 PHP 코드입니다.

    rrreee🎜이 코드는 A와 일치하는 정규식 /^[a-zA-Z]d{6,9}$/i를 사용합니다. 대문자로 시작하고 뒤에 6~9자리 숫자가 오는 문자열입니다. 🎜
      🎜군인번호 형식 확인🎜🎜🎜군인번호는 10~18자리의 숫자와 문자의 조합으로 이루어져 있으며, 10~16번째 숫자는 숫자, 17번째 자리는 숫자나 문자. 다음은 군인 ID 번호 형식을 확인하는 PHP 코드입니다. 🎜rrreee🎜이 코드는 정규식 /^w{9,17}$/i를 사용하여 9~17자리 숫자와 A 문자열을 일치시킵니다. 편지의. 일치에 성공하면 군인증 번호 10~16번째 숫자가 숫자인지, 17번째 숫자가 숫자 또는 문자인지를 계속해서 검증하는 기능입니다. 🎜🎜요약🎜🎜이 글에서는 PHP 정규식을 사용하여 주민등록번호, 여권번호, 군인증 번호의 형식을 확인하는 방법을 소개합니다. 정규식을 사용하면 사용자 입력 정보의 형식이 요구 사항을 충족하는지 효과적으로 확인할 수 있습니다. 특히 주민등록번호를 인증하려면 생년월일 인증, 인증코드 생성 등 숫자별로 다양한 인증 기능을 호출해야 한다. 다만, 정보를 확인하는 과정에서는 이용자의 개인정보가 보호되어야 합니다. 🎜

위 내용은 PHP 정규식을 사용하여 입력 문자열이 ID 번호, 여권 번호 또는 군인 ID 번호의 올바른 형식인지 확인하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.