- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
身份证号码编排规则及校验位C语言、C#语言、Java语言实现
/// summary
/// 校验身份证号,如果正确返回true如果错误返回false
/// /summary
/// param name=id
/// //身份证目前可分为15位和18位
//15位号码组成:省(2)市(2)区/县(2)年(2)月(2)日(2)+序列号(3)[奇数分配给男性偶数分配给女性]
//15位升级到18位:出生年都加上19,第二点:第十八位为校验位,也就是说第十八位要从前17位计算而来//如果是15位数字,那么我们就取得17,8位时出生年
//如果是18位,则先校验用户输入的身份证是否合法,如果合法者去7-10位为出生年
身份证号码中这些数字是怎样排列的,每个数字表示什么意思呢?下面就让我们一起来探索其中的规律吧!新的身份证号码是由18位数字组成的,它们分别表示:
(1)前1、2位数字表示:所在省份的代码;?
(2)第3、4位数字表示:所在城市的代码;?
(3)第5、6位数字表示:所在区县的代码;?
(4)第7~14位数字表示:出生年、月、日;?
(5)第15、16位数字表示:所在地的派出所的代码;
(6)第17位数字表示性别:奇数表示男性,偶数表示女性;?(7)第18位数字是校检码:也有的说是个人信息码,一般是随计算机的随机产生,?
用来检验身份证的正确性。校检码可以是0~9的数字,有时也用x表示。
15位的身份证号?dddddd yymmdd xx p?18位的身份证号?dddddd yyyymmdd xx p y?其中dddddd为地址码(省地县三级)18位中的和15位中的不完全相同?yyyymmdd yymmdd 为出生年月日?xx顺号类编码?p性别?18位中末尾的y为校验码,将前17位的ascii码值经位移、异或运算结果不在0-9的令其为x?18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999《公民身份号码》中做了明确规定。? GB11643-1999《公民身份号码》为GB11643-1989《社会保障号码》的修订版,其中指出将原标准名称“社会保障号码”更名为“公民身份号码”,另外GB11643-1999《公民身份号码》从实施之日起代替GB11643-1989。? 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位校验码。其含义如下:? 1. 地址码:表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。? 2. 出生日期码:表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日分别用4位、2位、2位数字表示,之间不用分隔符。? 3. 顺序码:表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。? 校验的计算方式:? 1. 对前17位数字本体码加权求和? 公式为:S = Sum(Ai * Wi), i = 0, ... , 16? 其中Ai表示第i位置上的身份证号码数字值,Wi表示第i位置上的加权因子,其各位对应的值依次为: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2? 2. 以11对计算结果取模? Y = mod(S, 11)? 3. 根据模的值得到对应的校验码? 对应关系为:? Y值: 0 1 2 3 4 5 6 7 8 9 10? 校验码: 1 0 X 9 8 7 6 5 4 3 2
C语言实现校验:
#include stdio.h
#include string.h
#include math.h
#include time.h
//C语言实现国民身份证号校验
int IsDigitBuf(char *sBuf, int nLen)
{
int i;
if (nLen == 0) return 1;
if (nLen strlen(sBuf)) nLen = strlen(sBuf);
for (i = 0; i nLen; i++)
if (!isdigit(sBuf[i])) return 0;
return 1;
}
int checkdate(int iYear, int iMonth, int iDay)
{
if (iYear 0 || iYear 9999)
return -1;
switch (iMonth)
{
case 1:
case 3
文档评论(0)