ID 15 rpmで18
最初の世代IDが15であり、カードの裏面には18桁です
ID 15:出生コードアドレスコード+(2年)の日付+オーダーコード
18 ID:出生+コードアドレスコードの日(4年)+ +コードチェックコード・シーケンス
住所コード:ローカル管理部門コード6
誕生コードの日付:誕生日
注文コード:同じアドレスの市外局番、番号が付けられている同じ月の同じ日に同じ年、男性のための奇妙な、女性の偶数のための
チェックコード:アルゴリズムを計算することで得られます。
方法較正
1.次のように最初の17桁は、異なる係数を係数配列を乗算されます。7-9-10-5-8-4-2-1-6-3-7-9-10-5- 8-4-2
2. 17桁の数字と係数の乗算結果は、追加のプラスアウトと11で分割され、残りはどのくらい見ている
私は0-1-2-3-4-5で3を数えることができますこれらの図の間-6-7-8-9-10 11は、チェックコードを対応する1-0-X-9-8-7-6-5-4-3-2である
剰余が0である場合、すなわちIDカード認証コードが1であり、Xが2の残りの部分であります
次に、コードの
// 计算校验码 公共 チャーgetVerifyCode(文字列idCard){ 場合(idCard == NULL || idCard.length()<17 ){ 戻り 0 。 } のchar []愛= idCard.toCharArray()。 INT []のWi = {7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2 }。 CHAR [] verifyCode = { '1'、 '0'、 'X'、 '9'、 '8'、 '7'、 '6'、 '5'、 '4'、 '3' }。 int型 S = 0 ; int型のy; 以下のために(int型私は= 0; I <wi.length。 } 、Y = S%11 。 リターンverifyCode [Y]。 } // 转换为18位 公衆ストリングgetNewIdCard(文字列OLDCARD){ StringBuilderのSB。 もし(!OLDCARD = NULL && oldCard.length()== 15 ){ SB = 新規のStringBuilder(); sb.append(oldCard.substring( 0,6))のappend( "19")アペンド(oldCard.substring(6。 ))。 sb.append(getVerifyCode(sb.toString()))。 リターンsb.toString(); } 他{ リターン「」。 } }
傍受文字、省略記号に置き換えられます
/ ** *切片に文字列STR の長さを保持する* strLength * / パブリック文字列の部分文字列(STR文字列、整数strLengthを){ IF(str.indexOf( " - | - "!)= -1 ){ STR = STR .replace( " - | - "、 ";" ); } 文字列S = "" ; IF(str.length < strLength.intValue()){ S = STR; } そうでなければ{ S = str.substring(0、strLength )+ "..." ; } 戻りS; }