身份证号算法

转载 2006年06月09日 08:23:00
∑(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;   

检验身份证号码真伪算法

import java.util.Scanner;/*检验身份证号码真伪算法:17位加权因子:7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 检...
  • sz457763638
  • sz457763638
  • 2015年03月23日 11:11
  • 353

中国大陆18位身份证校验算法(附JS实现)

大陆18位身份证(第二代身份证)结构:(如下图所示)身份号码是一组具有特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地区码,八位数字生日码,三位数字顺序码和一位数字校...
  • wolfcyl
  • wolfcyl
  • 2011年05月20日 23:15
  • 12937

PB身份证号码正确性校验

身份证号码校验(gf_check_identity) 可以同时对15位和18位的身份证进行校验,并自动根据平年和润年进行判断。可以在数据窗口ItemChanged事件中调用该函数进行校验。 /...
  • DavinciTeam
  • DavinciTeam
  • 2012年04月06日 13:49
  • 1793

【algorithm】源码详解中国大陆新身份证号码算法

之前印象身份证最后一位奇数为男性,偶数为女性。看了下算法才明白,这指的是老身份证15位,18位身份证末尾加了一个校验码,用来验证是否为真实身份证号。 先看中国大陆身份证结构: 1、号码的结构 公民身份...
  • gangannini
  • gangannini
  • 2013年09月05日 17:40
  • 2456

身份证验证算法(SQL版)

/**//*验证身份证算法By:刘志伟2008-1-29与天津*/CREATE FUNCTION [fn_ValidateIDC](@idc varchar(18))RETURNS BITASBEGI...
  • loworth
  • loworth
  • 2008年01月29日 19:08
  • 1083

身份证号码15到18位升位算法

身份证号码15到18位升位算法        根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成...
  • lixing732100721
  • lixing732100721
  • 2013年03月29日 13:36
  • 894

18位身份证号验证算法的原理以及C#实现和在管理系统的应用

本博文介绍一下我自主开发的企业工资管理系统中关于员工18身份证号合法性验证的原理以及采用C#实现的代码、在实际的管理系统中应用!...
  • u013871100
  • u013871100
  • 2016年07月10日 00:16
  • 1995

[Coding的专栏] C#实现的18位身份证格式验证算法

 C#实现的18位身份证格式验证算法 document.title="C#实现的18位身份证格式验证算法 - "+document.title18位身份证标准在国家质量技术监督局于1999年7月1日...
  • MaybeHelios
  • MaybeHelios
  • 2006年05月18日 20:56
  • 904

随机生成身份证号和年龄

package main; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStr...
  • zhoujialin
  • zhoujialin
  • 2015年06月14日 21:23
  • 1840

项目中验证身份证号码是否正确

在项目中验证身份证号码的工具类!可以验证16位和18位的身份证号码。 package com.hljw.util; import java.text.SimpleDateFormat; import...
  • zl544434558
  • zl544434558
  • 2014年03月21日 10:35
  • 1225
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:身份证号算法
举报原因:
原因补充:

(最多只允许输入30个字)