ホームページ  >  記事  >  バックエンド開発  >  PHP 正規表現を使用して、入力文字列が正しい ID 番号、パスポート番号、軍用 ID 番号の形式であるかどうかを確認する方法

PHP 正規表現を使用して、入力文字列が正しい ID 番号、パスポート番号、軍用 ID 番号の形式であるかどうかを確認する方法

WBOY
WBOYオリジナル
2023-06-24 09:30:061054ブラウズ

Web サイトやアプリケーションでは、ユーザーが入力した情報を検証する必要があることが多く、ID 番号、パスポート番号、軍用 ID 番号などが一般的な検証対象です。 PHP では、正規表現は、入力文字列が適切な形式であることを確認するために使用できる非常に便利なツールです。この記事では、PHP 正規表現を使用して ID 番号、パスポート番号、軍人 ID 番号の形式を確認する方法を紹介します。

  1. ID カード番号の形式を確認する

ID 番号は 18 桁または 15 桁で、18 桁の ID 番号の最後の桁は数字または文字の場合があります。バツ。以下は、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 桁の ID 番号 checkIDCard18($idcard) を検証する関数は、18 桁と一致する正規表現 /^d{17}(d|x)$/i を使用します。ヘッダーとオプションの数字または文字 X。照合が成功した場合、関数は引き続き ID 番号の生年月日が正しいかどうかを検証し、ID 検証コードを取得して最後の数字または文字 X と比較します。 15桁のID番号を確認する関数 checkIDCard15($idcard) まず18桁のID番号に変換してから、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 桁の数字が続く文字列と一致します。

    軍用 ID 番号の形式を確認する
軍用 ID 番号は 10 ~ 18 桁の数字と文字の組み合わせで、そのうち 10 ~ 16 桁は数字です。 17 番目のビットには数字または文字を使用できます。以下は、軍事 ID 番号の形式を検証する 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;
    }
}

このコードでは、9 に一致する正規表現

/^w{9,17}$/i が使用されています。 ~ 17 数字と文字の文字列。照合が成功した場合、関数は軍用 ID 番号の 10 桁から 16 桁が数字であるかどうか、および 17 桁が数字または文字であるかどうかを引き続き検証します。

概要

この記事では、PHP 正規表現を使用して ID 番号、パスポート番号、軍用 ID 番号の形式を確認する方法を紹介します。正規表現を使用すると、ユーザー入力情報の形式が要件を満たしているかどうかを効果的に検証できます。特に、ID カード番号の検証では、生年月日の検証や検証コードの生成など、さまざまな数字に基づいてさまざまな検証関数を呼び出す必要があります。ただし、情報を検証する際には、ユーザーのプライバシーを保護する必要があります。

以上がPHP 正規表現を使用して、入力文字列が正しい ID 番号、パスポート番号、軍用 ID 番号の形式であるかどうかを確認する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。