barkure

barkure

telegram
github

身分証明書のMOD 11-2検証

GB11643-1999 は、私たちの国の現行の国民身分証番号の国家標準です。この文書は簡単に見つけることができます。


身分#

身分証番号は、18 桁の番号で構成されています。身分証番号は、本体コードとチェックコードの 2 つの部分に分かれています。

本体コード#

身分証番号の最初の 17 桁は本体コード(マスターナンバー)であり、左から右に順番に並んでいます。6 桁の数字の住所コード、8 桁の数字の生年月日コード、3 桁の数字の順序コードです。この部分は比較的簡単なので、詳細は省略します。

チェックコード#

身分証番号の 18 番目の桁はチェックコード(チェックナンバー)であり、前の 17 桁を規定された数学的関係式で計算することで得ることができます。具体的には、MOD 11-2 チェックコードアルゴリズムが使用されます。

MOD 11-2 チェック#

まず、身分証番号の各桁には固定の重み係数 $Wi$ があります。これは、$2$ の $18-i$ 乗を $11$ で割った余りです。$i$ は各番号の桁数です。つまり、

Wi=218i(mod11)W_i = 2^{18-i}\pmod {11}

前の 17 桁の番号 $a_i$ と対応する重み係数 $W_i$ を掛けて合計すると、値 $S$ が得られます。

S=i=117Wi×aiS = \sum_{i=1}^{17}W_i×a_i

$S$ を $11$ で割った余りを求めます。

S(mod11)S\pmod{11}

そして、$12$ からこの余りを引きます。

12S(mod11)12-S\pmod{11}

最後に、この差を $11$ で割った余りを計算すると、最終的なチェックコード $a_{18}$ が得られます。

a18=(12S(mod11))(mod11)a_{18} = (12-S\pmod{11})\pmod{11}

さて、アルゴリズムを知ったので、試してみましょう(ここでは、前述の国家標準の付録 A を例にします):

ある市民の身分証番号は 11010519491231002X です。

最初に、前の 17 桁の各々の重み係数 $W_i$ を求めます

まず、第 5 桁の重み係数 $W_5$ を求めてみましょう:

2185=213=81922^{18-5} = 2^{13} = 8192

$W_5$ は 8192 を 11 で割った余りとなります:

W5=8192(mod11)=8W_5 = 8192\pmod{11} = 8

同様に、計算を進めると、以下の $a_i$ と $W_i$ の関係に関する表を簡単に作成できます:

$a_i$1234567891011121314151617
$W_i$7910584216379105842

次に、値 $S$ を求めます:

S=i=117Wi×ai=71+91+100+51+80+45+21+19+64+39+71+92+103+51+80+40+22=167S = \sum_{i=1}^{17}W_i×a_i = 7*1+9*1+10*0+5*1+8*0+4*5+2*1+1*9+6*4+3*9+7*1+9*2+10*3+5*1+8*0+4*0+2*2 = 167

167 を 11 で割った商は 15 余り 2 です:

167(mod11)=2167\pmod{11} = 2

12 から 2 を引くと 10 になり、10 を 11 で割った商は 0 余り 10 です:

(122)(mod11)=10(12-2)\pmod{11} = 10

したがって、チェックコード $a_{18}$ は 10 となります。また、身分証番号は 18 桁であるため、10 はローマ数字の X で代用されます。したがって、この市民の身分証番号のチェックコードは X です。


注:この文書は以下の情報を参考にしています:


咳咳

LaTeX の初体験で、使いやすくて良い感じです。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。