ホームページ >バックエンド開発 >PHPチュートリアル >PHP正規表現を使用してID番号の有効性を検証する方法

PHP正規表現を使用してID番号の有効性を検証する方法

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

ID 番号の入力が必要なアプリケーションを開発する場合、入力された ID 番号が正しいかどうかを確認することが非常に重要です。この記事では、PHP 正規表現を使用して ID 番号の正当性を検証する方法を紹介します。

ID番号とは何ですか?

ID カード番号は、中国 (本土) の居住者を識別するために使用され、18 桁の数字と文字で構成される個人識別番号です。

ID 番号の構造

ID 番号は 18 桁の数字と文字で構成されており、最初の 1 桁目は所在地の都道府県または市区町村を示す数字、2 桁目から 6 桁目までです。数字は地域を示す数字、7 桁目から 14 桁目は生年月日を示す日付コード、15 桁目から 17 桁目は地元の警察署のコードを示す数字、18 桁目は数字または文字、アルゴリズムによって計算され、ID 番号の正確性を検証するために使用されます。

正規表現を使用して ID 番号の有効性を検証する

正規表現は文字列パターンを記述する言語であり、文字列の取得、置換、分離に使用できます。 PHP 正規表現を使用して、ID 番号の有効性を確認します。

以下は基本的な ID 番号検証ルールの一部です:

1. ID 番号は 18 個の数字と文字で構成されます。

2. ID 番号の 1 桁目から 6 桁目は、お客様がお住まいの地域を示し、所定の行政区画コードに準拠しています。

3. ID カード番号の 7 桁目から 14 桁目は生年月日を示しており、日付の合法性と一致しています。

4. ID番号の15桁目から17桁目は所轄の警察署のコードを表します。

5. ID 番号の最後の桁はチェック コードであり、アルゴリズムによって計算できます。

上記の規則に従って、正規表現は次の部分に分割されます:

1. ID 番号の長さは 18 桁です。

2. ID 番号の 1 桁目から 6 桁目は数字または文字です。

3. ID 番号の 7 桁目から 14 桁目は数字であり、日付の正当性に従います。

4. ID番号の15桁目から17桁目は数字です。

5. ID 番号の最後の桁は数字または文字です。

上記のルールに従って、次のような PHP 正規表現コードを記述できます:

function validate_id_card($id_card){
    //身份证号码的长度为18位
    if(strlen($id_card)!=18){
        return false;
    }
    
    //身份证号码中第一位至第六位是数字或字母
    $pattern='/^[0-9a-zA-Z]{6}/';
    if(!preg_match($pattern, substr($id_card,0,6))){
        return false;
    }
    
    //身份证号码中第七位至第十四位是数字,且符合日期的合法性
    $date=substr($id_card,6,8);  
    if(!is_numeric($date)){  
        return false;  
    }
    $year=(int)substr($date,0,4);  
    $month=(int)substr($date,4,2);  
    $day=(int)substr($date,6,2);  
    if(!checkdate($month,$day,$year)){  
        return false;  
    }
    
    //身份证号码中第十五位至第十七位是数字
    $pattern='/^d{3}/';
    if(!preg_match($pattern, substr($id_card, 14, 3))){
        return false;
    }
    
    //身份证号码中最后一位是数字或字母
    $pattern='/^[0-9a-zA-Z]{1}/';
    if(!preg_match($pattern, substr($id_card, 17, 1))){
        return false;
    }
    
    //校验码验证
    $digit_array=array(1,0,'X',9,8,7,6,5,4,3,2);
    $check_sum=0;
    for($i=0;$i<17;$i++){
        $check_sum += substr($id_card,$i,1)*$digit_array[$i];
    }
    $mod=$check_sum%11;
    $verify_code=$digit_array[$mod];
    if($verify_code != strtoupper(substr($id_card,17))){
        return false;
    }
    
    return true;
}

コードの説明:

  • 1 行目から 21 行目は名前を定義します。 ID番号の正当性を検証するために使用される「validate_id_card」関数。この関数は、ID 番号である $id_card パラメーターを受け取ります。
  • 行 3 では、ID 番号の長さが 18 桁であることを確認します。
  • 6 行目から 10 行目では、ID 番号の 1 桁目から 6 桁目が数字または文字であることを確認します。
  • 行 13 ~ 22 では、ID 番号の 7 桁目から 14 桁目が数字であることを確認し、日付が正当であるかどうかを確認します。
  • 25行目から29行目でID番号の15桁目から17桁目が数字であることを確認しています。
  • 行 32 ~ 36 では、ID 番号の最後の桁が数字または文字であることを確認します。
  • 39行目から50行目でID番号のチェックコードが正しいかどうかを確認しています。

使用例

PHP でこの関数を使用する方法は次のとおりです:

$id_card='510722199091231234';
if(validate_id_card($id_card)){
    echo $id_card.' 是有效的身份证号码';
}
else{
    echo $id_card.' 不是有效的身份证号码';
}

出力:

510722199091231234 是有效的身份证号码

Summary

Through上記のPHP正規表現コードと使用例により、IDカード番号の正当性検証を実現できます。 ID 番号を使用するアプリケーションを開発する場合、不正なデータ入力によって引き起こされる例外やエラーを回避するために、ID 番号の正当性を保証することが非常に重要です。

以上がPHP正規表現を使用してID番号の有効性を検証する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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