身份证号算法
 ∑(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   
Wi  7    9    10    5    8    4    2    1    6    3  7  9  10  5  8  4  2  1   
  根据公式(1)进行计算,然后根据计算的结果,从下面的表中查出相应的校验码,其中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       
  用Delphi实现身份证15位升18位的算法     
摘自《网易虚拟社区》  (文/耙子)     
  谢谢大虾的帮助。我通过你的帮助,我已经找到了计算机世界的那篇文章,  我还写了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;    
相关知识
提升树算法
随机化算法(1) — 随机数
蚁群算法+Dijkstra算法=二维路径规划,基于蚁群算法的机器人路径规划,matlab源码.rar资源
宠物行为分析算法
ABC英语角宠物助手算法
ID3算法(含实例)
粒子群算法学习(PSO)
AI宠物护理算法工程师
宠物声音识别ai算法
动物语音识别用什么算法
网址: 身份证号算法 https://www.mcbbbk.com/newsview494913.html
| 上一篇: 求方程ax2+bx+c的根pyt | 下一篇: 法国斗牛犬宠物狗头钱包设计 | 
推荐分享
 
                
                
                
                - 1养玉米蛇的危害 28694
- 2狗交配为什么会锁住?从狗狗生 7180
- 3我的狗老公李淑敏33——如何 6236
- 4豆柴犬为什么不建议养?可爱的 4637
- 5南京宠物粮食薄荷饼宠物食品包 4563
- 6中国境内禁养的十大鸟种,你知 4429
- 7湖南隆飞尔动物药业有限公司宠 4259
- 8自制狗狗辅食:棉花面纱犬的美 4257
- 9家养水獭多少钱一只正常 4212
- 10广州哪里卖宠物猫狗的选择性多 4122






