发信人: pazee() 
整理人: kevintz(2000-10-25 16:11:18), 站内信件
 | 
 
 
【 在 doggo (doggo) 的大作中提到: 】
 : 【 在 pazee (耙子) 的大作中提到: 】
 : : 谁知道身份证 15位升18位的算法?
 : : 
 : : 15位的含义我已经明白,
 :    .......
 
 谢谢大虾的帮助。我通过你的帮助,我已经找到了计算机世界的那篇文章,
 我还写了delphi的过程,但是不适用于100岁以上的老人。
 我才发现现在的身份证校验码居然可能是英文字母x,为什么用字母呢?谁知道?
  起码电话上就输不进去新的号码。
 
 转贴部分计算机世界的文章:
 
 公民身份号码升位在SYBASE数据库上的实现 
 四川省绵阳市 
 胥永康 
 ---- 根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规 定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。 排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺 序码和一位数字校验码。 
 
 ---- 地址码表示编码对象常住户口所在县(市、旗、区)的行政区划代码。生日期 码表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间 不用分隔符。顺序码表示同一地址码所标识的区域范围内,对同年、月、日出生 的人员编定的顺序号。顺序码的奇数分给男性,偶数分给女性。校验码是根据前 面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。下面 举例说明该计算方法。 
 
 ---- 某男性公民身份号码本体码为34052419800101001,首先按照公式⑴计算:  
 
 ∑(ai×Wi)(mod 11)……………………………………(1)
 
 公式(1)中:i----表示号码字符从由至左包括校验码在内的位置序号;
 ai----表示第i位置上的号码字符值;
 Wi----示第i位置上的加权因子,其数值依据公司Wi=2(n-1)(mod 11)计算得出 。
 
 i	18	17	16	15	14	13	12	11	10	9	8	7	6	5	4	3	2	1
 
 ai	3	4	0	5	2	4	1	9	8	0	0	1	0	1	0	0	1	a1
 
 Wi	7	9	10	5	8	4	2	1	6	3	7	9	10	5	8	4	2	1
 
 ai×Wi	21	36	0	25	16	16	2	9	48	0	0	9	0	5	0	0	2	a1
 
 
 根据公式(1)进行计算:
 
 ∑(ai×Wi) =(21+36+0+25+16+16+2+9+48++0+0+9+0+5+0+0+2) = 189
 
 189 ÷ 11 = 17 + 2/11
 
 ∑(ai×Wi)(mod 11) = 2
 
  然后根据计算的结果,从下面的表中查出相应的校验码,其中X表示计算结果为 10:
 
 ∑(ai×WI)(mod 11)	0	1	2	3	4	5	6	7	8	9	10
 校验码字符值ai		1	0	X	9	8	7	6	5	4	3	2
 
 ---- 根据上表,查出计算结果为2的校验码为所以该人员的公民身份号码应该为 34052419800101001X。
 
 
 以下是我的delphi 函数
 
 function TForm1.f(ID: string):string;
 const
   W:array [1..18] of integer = (7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1) ;
   A:array [0..10] of char = ('1','0','x','9','8','7','6','5','4','3',' 2');
 var
   i, j, S: integer;
   NewID: string;
 begin
   if Length(ID) <> 15 then
     result:= ''
   else begin
     NewID:= ID;
     Insert('19', NewID, 7);
     S:= 0;
     try
       for i:=1 to 17 do begin
         j:= StrToInt(NewID[i]) * W[i];
         S:= S + j;
       end;
     except
       result:= '';
       exit;
     end;
     S:= S mod 11;
     Result:= NewID + A[S];
   end;
 end;
 
 正确与否请大家指正!
 再次谢谢。
  -- .------------------------------------------------. 
 |                                                |
 |  英特那雄乃尔就一定要实现!           ...       |
 |                                    /(. .)\     |
 `---------------------------------ooO--(_)--Ooo--' 
  ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 61.141.207.93]
  | 
 
 
 |