アイデンティティーチェックコード

8350 ワード

目次
  • 身分証明書番号
  • 身分証明書の構成構造
  • アドレスコード(上位6桁)
  • 生年月日コード(7位から14位)
  • シーケンスコード(15ビットから17ビットまで)
  • 検査コード(18桁目)
  • 計算方法
  • 身分証明書番号
                         ,   GB 11643-1999            ,              。
    

    身分証明書の構成構造
                ,                         。
               :       ,         ,       ,          。
    

    アドレスコード(上位6桁)
    コードの対象を示す常住戸籍の所在県(市、旗、区)の行政区画コードは、GB/T 2260の規定に従って実行される.
    生年月日コード(7位から14位)
    符号化対象が生まれた年、月、日を表し、GB/T 7408の規定に従って実行し、年、月、日コードの間に区切り記号を使わない.
    シーヶンスコード(15~17ビット)
    同一アドレスコードに表示されるエリア範囲内で、同年、同月、同日生まれの人に対して編成された順番番号を示し、順番コードの奇数は男性に、偶数は女性に割り当てられる.
    チェツクコード(18桁目)
    前の十七桁の文字コードによって、ISO 7064:1988.MOD 11-2検査コードから算出された検査コード.
    計算方法
  • は、前の身分証明書番号の17桁をそれぞれ異なる係数に乗算する.第1位から第17位までの係数は、それぞれ、7−9−10−5−8−4−2−1−6−3−7−9−10−5−8−4−2であった.
  • は、この17ビットの数字と係数を乗算した結果を加算する.
  • 加算と11で割って、残りの数はいくらですか?
  • の残りの数は、0-1-2-3-4-5-6-7-8-9-10の11の数字しかありません.それぞれ対応する最後の身分証明書の番号は1-0-X-9-8-7-6-5-4-3-2である.
  • は、残りが3であれば、身分証明書の18番目の数字に9が現れることを知っています.対応する数字が2であれば、身分証明書の最後の番号はローマ数字xです.

  • 例えば、ある男性の身分証明書番号は【530219200508011 x】で、この身分証明書が合法的な身分証明書であるかどうかを見てみましょう.
    まず,上位17ビットの積と,[(57)+(39)+(010)+(15)+(08)+(24)+(12)+(91)+(26)+(03)+(07)+(59)+(010)+(85)+(08)+(14)+(1*2)]が189であり,189を11で割った結果,189/11=17------2,すなわちその残数は2であった.最後に,対応ルールにより,剰余2に対応する検査コードがXであることが分かる.したがって、これが正しい身分証明書番号であると判定することができる.
    
    var_dump(checkIdCard('    '));
    /**
     *        
     * @param $idCard
     */
    function checkIdCard($idCard)
    {
        if (strlen($idCard) != 18) {
            return '        ';
        }
        $idCard = strtoupper($idCard);//   ,    X   
        $co = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];//  
        $cc = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];//   
        $sum = 0;
        for ($i = 0; $i < 17; $i++) {
            $sum += $co[$i] * $idCard[$i];
        }
        $checkCode = $sum % 11;
        if ($idCard[17] == $cc[$checkCode]) {
            return '    ';
        } else {
            return '     ';
        }
    }
    ?>