比特派新版本下载|身份证号码

作者: 比特派新版本下载
2024-03-17 12:18:05

全国身份证号码大全 - 身份证号大全 | PV138开发资源网

全国身份证号码大全 - 身份证号大全 | PV138开发资源网

···首页···开发工具···开发入门教程···网址导航··· 搜索 Ctrl K 身份证号码大全 身份证号码查询 身份证号码生成器 全国身份证号大全(并非现实生活中真实的身份证号码和真实姓名,仅供测试使用)

在线免费身份证号码查询: 查 询 身份证号码和姓名大全示例:

振家罗

210811196005132133 63 男 辽宁省 

营口市 

老边区 

涛何

620981199306060529 30 女 甘肃省 

酒泉市 

玉门市 

金鑫杜

510723198703310945 36 女 四川省 

绵阳市 

盐亭县 

志泽张

230503201701040639 6 男 黑龙江省 

双鸭山市 

岭东区 

擎苍余

330481195512170919 68 男 浙江省 

嘉兴市 

海宁市 

哲瀚林

350504196511117148 58 女 福建省 

泉州市 

洛江区 

涛林

370215192008158696 103 男 山东省 

青岛市 

即墨区 

浩宇郑

71114619701215511X 53 男 台湾省 

新北市 

三峡区 

瑾瑜薛

610423192904212129 94 女 陕西省 

咸阳市 

泾阳县 

浩宇司徒

45122319000409472X 123 女 广西壮族自治区 

河池市 

凤山县 

昊然苏

62112119840323243X 39 男 甘肃省 

定西市 

通渭县 

正豪司马

620821196212064478 61 男 甘肃省 

平凉市 

泾川县 

立轩杨

654003198904020451 34 男 新疆维吾尔自治区 

伊犁哈萨克自治州 

奎屯市 

子默宇文

361124190405033660 119 女 江西省 

上饶市 

铅山县 

浩洪

712445191108148452 112 男 台湾省 

屏东县 

内埔乡 

身份证号码大全说明:

本站提供的身份证号码和姓名由系统随机组合而成,

并非现实生活中真实的身份证号码和真实姓名, 可用于网站开发测试时期的初级身份证号码验证,男女满18岁成年人身份证游戏防沉迷注册等软件程序测试,请勿用于任何其他用途。

若因使用这些身份证号码而产生任何问题和纠纷,本网站不承担任何直接或间接的责任!

全国身份证号码大全: 北京市天津市河北省山西省内蒙古自治区辽宁省吉林省黑龙江省上海市江苏省浙江省安徽省福建省江西省山东省河南省湖北省湖南省广东省广西壮族自治区海南省重庆市四川省贵州省云南省西藏自治区陕西省甘肃省青海省宁夏回族自治区新疆维吾尔自治区 © 2023 PV138 · 站点地图 · 免责声明 · 联系我们 · 问题反馈

京ICP备16004482号-1 京公网安备11010802040649号

2022可用身份证号码游戏注册用大全(身份证注册游戏18岁实名认证)_游戏_聊八卦娱乐网

2022可用身份证号码游戏注册用大全(身份证注册游戏18岁实名认证)_游戏_聊八卦娱乐网

首页

娱乐

明星网红八卦游戏

生活

美食健康小妙招科普情感

时尚 影视 新鲜事

首页

娱乐

游戏

2022可用身份证号码游戏注册用大全(身份证注册游戏18岁实名认证)

2022-02-17 22:09:07

• 游戏 • 阅读 414314

身份证号大全,实名认证满18岁注册游戏,一般在网上的身份证注册游戏时自动匹配的名字跟号码都不是真实存在的,都是系统按照规律匹配的,下面分享身份证号大全实名认证18岁注册游戏相关内容。

身份证号大全:邰政琴:120112196405046978太叔宝:12011219640504733X卫竹:120112196405047778金安壮:120112196405046556丁华荣:120112196405047778荆荣启:120112196405047858史富妮:120112196405048156堵淑奇:120112196405046337卓波君:120112196405047938堵晶:120112196405049538殷馥:120112196405048754柯启:120112196405048156夏楠:120112196405047057阎倩梵:120112196405046310封珠:120112196405049036季莎:130725196703047318欧阳雯:130725196703048513彭灵:130725196703046219解馥:130725196703048433武思萍:130725196703047799邹启若:130725196703046219蓝发儿:130725196703049137温霭元:130725196703047895杨维:130725196703048150贺克:130725196703047393怀鹏枝:13072519670304757X符亮:130725196703048513寇琪梅:130725196703049137从敬:130725196703047916浦会:130725196703047297戚苇克:220403196909176198诸葛谦:220403196909178177吕贵程:220403196909179057惠兴雨:220403196909176016长孙艳桂:220403196909178871寇剑:22040319690917829X宗政翠:220403196909177174杜世华:220403196909176075诸环:220403196909176075嵇唯群:220403196909178855杭睿:220403196909178652崔伟:220403196909176091严琦:220403196909179516娄俊露:220403196909177959祁宝松:220403196909178935骆蓉萱::220403197203108251聂巧保:220403197203106598赫连岚:220403197203106475徐离勤:220403197203106053罗洋:220403197203108593费峰云:220403197203106539金滢:220403197203106213农美君:22040319720310973X诸富:220403197203106678池枝:220403197203108614张柔娣:220403197203109537莘霄剑:220403197203106977屠哲烟:220403197203108876樊唯:220403197203106715童菡婉:220403197203109713 本文出处:https://www.liaobagua.com/youxi/834.html

生活游戏认证

赞 (192)

生成海报

王者荣耀:虞姬走得慢有必要出移速装备吗?(二技能是用来挡伤害而不是逃命)

上一篇 2022-02-19

王者女英雄去衣无遮挡无爱心图片分享(王者荣耀女性感老司机福利合集)

下一篇

2022-02-17

相关阅读

2024-02-03 吴英洙为什么被抓了?鱿鱼游戏爷爷吴英洙被刑判处有期徒刑一年 2024-02-02 诗人属于艺术家吗?古代诗人靠什么赚钱养活自己? 2024-01-30 女性什么年龄段容易感染hpv?女性hpv是怎么感染的! 2024-01-30 大学里党委书记和校长如何排名?他们哪个大? 2024-01-26 印度高种姓女人长相照片,印度女人为何不嫁中国? 2024-01-26 垃圾不分类有哪些危害,这些垃圾分类标志你认识吗?

热门点击

2022可用身份证号码游戏注册用大全(身份证注册游戏18岁实名认证)

2022-02-17

王者荣耀女英雄去掉小内无爱心图片(王者荣耀把西施玩喷了图)

2022-04-05

王者出生榜梗是什么意思(王者出生榜排名前五盘点)

2022-12-27

王者女英雄去衣无遮挡无爱心图片分享(王者荣耀女性感老司机福利合集)

2022-02-17

蒂法为什么叫耶路撒冷(3D区不能失去蒂法mod图)

2022-08-01

“梦泪终极猎手”是什么梗(梦泪终极猎手图片表情包)

2022-08-17

王者荣耀曜的姐姐镜被捅到流口水美女图片

2022-01-05

你什么身份我什么地位梗的出处及怎么回怼对方

2022-10-25

王浩强是谁什么梗(全网寻找王浩强什么梗出处)

2022-08-03

“你们都没有手机吗”是什么梗(你们都没有手机吗表情包)

2022-08-18

最新更新

春节王者荣耀限玩日历(2024寒假未成年游戏时间)

2024-01-09

神里绫华是哪个国家的人(原神里面主要角色国籍划分)

2023-12-18

比尔森选择站着死谁说的?是什么意思?

2023-07-19

王者荣耀职业选手一笙做什么了被开罚单?第一现眼包来了!

2023-06-14

Ruler和Uzi对战记录,尺帝恐狗症的由来!

2023-06-13

联系我们

Copyright © 2021 www.liaobagua.com 版权所有 粤ICP备2021169895号 Powered by 聊八卦娱乐网

身份证号的正确格式是怎样的? - 知乎

身份证号的正确格式是怎样的? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册身份证身份证号的正确格式是怎样的?关注者5被浏览349,536关注问题​写回答​邀请回答​添加评论​分享​4 个回答默认排序知乎用户5FspMe​ 关注身份证号码编排规则身份证号码是由18位数字组成,分别表示:第1、2位数字表示:所在省份的代码第3、4位数字表示:所在城市的代码第5、6位数字表示:所在区县的代码第7-14位数字表示:出生年、月、日(其中7、8、9、10位是年,11、12位是月,13、14位是日)第15-17位都是同一地址辖区内的,以及同年同月同日出生人的顺序码,同时第17位兼具性别标识功能,男单女双第18位数字是校检码:可以是0-9的数字,有时也用X表示发布于 2019-07-29 14:20​赞同 28​​添加评论​分享​收藏​喜欢收起​兰淽热衷于探索人类历史、文化、艺术,分享知识和启发思考。​ 关注公民身份号码由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。中华人民共和国居民身份证是国家法定的证明公民个人身份的有效证件。中国大陆居民身份证号码中的地址码的数字编码规则为:第一、二位表示省(自治区、直辖市、特别行政区)。第三、四位表示市(地级市、自治州、地区、盟及直辖市所属区和县的汇总码)。其中,01-20,51-70表示地级市;21-50表示地区(自治州、盟)。第五、六位表示县(区、县级市、旗)。01-18表示地级市、自治州、地区、盟辖县级市;21-80表示县(旗);81-99表示省直辖县级行政单位。发布于 2019-07-24 22:24​赞同 2​​添加评论​分享​收藏​喜欢收起​​

中华人民共和国居民身份证_百度百科

共和国居民身份证_百度百科 网页新闻贴吧知道网盘图片视频地图文库资讯采购百科百度首页登录注册进入词条全站搜索帮助首页秒懂百科特色百科知识专题加入百科百科团队权威合作下载百科APP个人中心中华人民共和国居民身份证播报讨论上传视频中华人民共和国公民身份证明文件收藏查看我的收藏0有用+10中华人民共和国居民身份证是用于证明居住在中华人民共和国境内的公民身份证明文件。在1984年前的名称写作“身份证”。1984年4月6日国务院发布《中华人民共和国居民身份证试行条例》,并且开始颁发第一代居民身份证。2003年6月28日,第十届全国人大常委会第3次会议通过《中华人民共和国居民身份证法》,2003年6月28日经主席令第4号公布;2004年3月29日起,中国大陆正式开始为居民换发内置非接触式IC卡智能芯片的第二代居民身份证,二代身份证表面采用防伪膜和印刷防伪技术,使用个人彩色照片,并可用机器读取数字芯片内的信息。2018年2月7日,北京警方通报:2018年将适时推出居民身份证自助办理服务和流动人口微信办理居住证等相关事宜。 [1]自2018年4月1日起,停征首次申领居民身份证工本费。 [3]自2018年4月9日开始,部分城市和地区开展失效居民身份证信息和非居民身份证件信息核查试点工作。 [2]中文名中华人民共和国居民身份证外文名Resident Identity Card of the People's Republic of China定    义证明居住在中华人民共和国境内的公民身份证明文件首次颁发1984年4月6日相应法律《中华人民共和国居民身份证法》目录1证件条例2身份证法3换发4正反面信息5少数民族地区版本6办证流程▪首次申领(申请领取)居民身份证▪补领居民身份证▪换领居民身份证▪异地受理、挂失申报和丢失招领制度▪居民身份证办理时限▪跨省通办7证件号码制度8国家标准9号码组成10注意事项11适用范围12防伪技术13多拍优选14电子化15身份证“网证”16补换领证件条例播报编辑从中华人民共和国成立起,一直到1984年4月6日前,中华人民共和国公民并没有身份证件,证明身份需用户口簿、介绍信等。1984年4月6日,中华人民共和国国务院发布《中华人民共和国居民身份证试行条例》,公安部的工作人员开始进行有关技术和具体实施方法的研究,在自行研制并且借鉴外国之后,第一代居民身份证的形式被确定为聚酯膜塑封的单页卡片。1984年至1991年,北京、上海、天津等大城市开始进行试行身份证制度。生活在北京的中国歌剧舞剧院女高音歌唱演员单秀荣成为中华人民共和国第一个领到第一代身份证的中国居民。1985年9月6日,中华人民共和国全国人民代表大会常委会第12次会议批准发布《中华人民共和国居民身份证条例》,条例中规定所有年满十六岁居住在中华人民共和国境内的中国公民(除服现役的人民解放军军人、人民武装警察、依照法律正在服刑的犯人和被劳动教养的人员之外)都应当申领居民身份证。从此公安部开始统一印制、公安机关开始负责颁发和管理第一代居民身份证。中华人民共和国的居民身份证制度开始实施。一直到2003年,中华人民共和国累计制作颁发居民身份证11.4亿份,实有持证人数达9.6亿。然而随着时代的发展,证件的发放范围不够全面、制作工艺落后容易造假证、执法人员查验居民身份证的法制空缺的问题凸现,为应对这些问题和信息时代的到来,《中华人民共和国居民身份证法》的制定工作和第二代居民身份证的研发工作开始了。身份证法播报编辑2003年6月28日,中华人民共和国全国人民代表大会通过了《中华人民共和国居民身份证法》,代替了《中华人民共和国居民身份证条例》。《中华人民共和国居民身份证法》扩大了证件发放范围,法律规定现役的人民解放军军人、人民武装警察,可以自愿申领居民身份证;未满16周岁的公民,也可以根据自愿,申领居民身份证。有法律规定第一代身份证在有效期内继续有效。第二代身份证的设计方向:居民身份证具备视读与机读两种功能。这样可以适应信息时代的需要,增大伪造难度,减少鉴别真伪的难度(用专用读卡器即可)。2007年10月21日,中国国务院,中央军事委员会颁令公布《现役军人和人民武装警察居民身份证申领发放办法》,该办法于2008年1月1日起施行。规范现役军人、人民武装警察居民身份证的申领和发放。 [4]2011年10月29日,十一届全国人大常委会第二十三次会议通过了关于修改居民身份证法的决定。修改后的居民身份证法规定:公民申请领取、换领、补领居民身份证,自愿登记指纹信息,但提取指纹不利于公民权利。换发播报编辑2004年1月1日,第二代居民身份证开始换发,二代证已经逐渐取代了一代证。自2013年1月1日起,第一代居民身份证将退出历史舞台。但在该日之前,处于有效期内的一代身份证继续有效。然而仍有多种证件可以临时替代第二代身份证。2017年4月27日消息,3年来,全国公安机关共清理重复户口306.7万个,清理应销未销户口212.5万个,纠正登记项目差错1101万项,全国公民身份证号码重号人数由171万人减至8人,公安机关已对这8人的人口信息做了特殊标注,达到其公民身份号码唯一性的效果。 [5]正反面信息播报编辑居民身份证(包括一、二两代)上用中文(民族自治地方根据情况同时用中文和当地通用文字)表示以下项目:反面姓名: 某某某性别:男、女民族:╳出生:(格式:“╳╳╳╳年╳月╳日”)住址:(即常住户口所在地住址)18位公民身份号码正面国徽、证件名称签发机关(第一代用印章形式,第二代用文字形式)证件的有效期限(未满十六周岁:五年;十六周岁至二十五周岁:十年;二十六周岁至四十五周岁:二十年;四十六周岁以上:长期)此外第一代身份证反面有持证人的黑白照片,第二代是彩色的。1984年,有关各方曾就居民身份证是否要有“婚姻状况”、“职业”等内容进行过争论和探讨,综合考虑中华人民共和国国内的实际情况,最终没有成为身份证内容。少数民族地区版本播报编辑少数民族文字身份证根据《中华人民共和国居民身份证法》第一章 第四条 第二款项,“民族自治地方的自治机关根据本地区的实际情况,对居民身份证用汉字登记的内容,可以决定同时使用实行区域自治的民族的文字或者选用一种当地通用的文字。”允许中国少数民族地区使用相应的主体少数民族文字的民汉双文身份证,如广西签发的第一代、第二代身份证都有壮文。第一代民族文字因技术原因采用手写,第二代六种民族文字全部采用计算机输入。中国第二代身份证有壮文、维吾尔文、彝文、藏文、蒙古文、朝鲜文六种民族文字与汉文字并列的双文版身份证。使用以上六种民族文字的少数民族地区的共有资料部分一律为民族文在上(蒙文在汉文之左则)、汉文在下双文版本。本人资料部分少数民族地区的主体少数民族居民可以申请附加民族语言在汉文之上,汉族以及其他民族居民则只显示汉文。即:新疆维吾尔自治区全区的身份证的共有资料部分一律为维汉双文版本(例:姓名 نامى),而区内的维吾尔族居民可以在本人资料部分的汉文之上附加维吾尔文(例:纳斯尔丁·阿凡提 نەسىرىدىن ئەپەندى),而区内的汉族或其他少数民族的本人资料部分则只有汉文,或也可申请附加维吾尔文,但不能附加其他的民族文字(如哈萨克文、蒙古文、锡伯文等)。办证流程播报编辑中国公民在年满16周岁之日起三个月内,应当申请领取居民身份证;中国未满16周岁公民,可以申请领取居民身份证。香港同胞、澳门同胞、台湾同胞迁入内地定居的,华侨回国定居的,以及外国人、无国籍人在中华人民共和国境内定居并被批准加入或者恢复中华人民共和国国籍的,在办理常住户口登记时应当依照《居民身份证法》的规定申请领取居民身份证。首次申领(申请领取)居民身份证1、年满十六周岁公民首次申领居民身份证时,由本人携带户口簿前往户口所在地派出所或办证中心办理。未满十六周岁公民首次申领居民身份证时,应由本人携带户口簿,并由监护人陪同代为申请。监护人一般需要提供本人身份证明(当公民本人与监护人不在同一户口簿上或监护人不为户主无法证明监护关系的,还需提供诸如出生证明等监护关系证明),并与未满十六周岁公民本人现场合影存档,以保证未满十六周岁公民身份的准确性。由于现场需采集人像和指纹信息,故未满十六周岁首次申领居民身份证不允许由监护人代办,须本人和监护人同时到场申请办理。2、户口所在地户籍窗口打印《人口信息核对表》,核对人口信息。3、人口信息正确无误,受理窗口采集人像、指纹后直接打印《居民身份证申领登记表》。4、申领人或监护人在《居民身份证申领登记表》上签字确认,领取《居民身份证领取凭证》。5、接到领证通知后本人携带《居民身份证领取凭证》到指定地点领取证件。若申领人急需使用居民身份证,可以自愿申请办理邮寄证件。 [6]补领居民身份证1、本人携带户口簿或其他能证明身份的证件到户籍地所属省级行政区任一派出所或办证中心办理(不符合省内异地办证要求的只能在户籍地按要求提供材料办理)。符合省外异地合法稳定居住、就业或就学等条件,已办理人口信息登记且符合异地办证公安部统一要求的,还可持居住证、户口簿或其他公安机关签发的有效身份证件、相关就学/就业/居住证明材料在现居地申请全国跨省异地办证 [8]按照法律及公安部法规规定,补证不因年龄而异,未满十六周岁的公民身份证丢失的,也可本人携带上述材料申请补领。2、受理窗口采集人像、指纹后直接打印《居民身份证申领登记表》或《居民身份证异地受理登记表》。3、申领人在表格上签字确认,交纳证件工本费(40元,法律规定有特殊情形的除外),领取《居民身份证领取凭证》和收费收据。4、接到领证通知后本人携带《居民身份证领取凭证》到指定地点领取证件。若申领人急需使用居民身份证,可以自愿申请办理邮寄证件。 [7]换领居民身份证1、换领居民身份证主要分以下几种情况:①已申领第一代居民身份证首次换领第二代居民身份证②市外新迁入需换领居民身份证③已申领第二代居民身份证,居民身份证登记项变更或更正④证件损坏⑤有效期满前三种情况需要本人携带户口簿与原身份证到户口所在地派出所办理。因各类原因影响核验身份的(如相貌变化过大、指纹无法核验等),还需提供相关证明。后两种情况可以本人携带户口簿、原身份证或其他能证明身份的证件到户籍地所属省级行政区任一派出所或办证中心办理(若不符合省内异地办证要求的只能在户籍地按要求提供材料办理)。符合省外异地合法稳定居住、就业或就学等条件,已办理人口信息登记且符合异地办证公安部统一要求的,还可持居住证、原身份证、户口簿或其他公安机关签发的有效身份证件、相关就学/就业/居住证明材料在现居地申请全国跨省异地办证 [8]按照法律及公安部法规规定,换证不因年龄而异,未满十六周岁公民的居民身份证有上述情形的,也可按照上述要求本人携带材料申请换领居民身份证。2、受理窗口采集人像、指纹后直接打印《居民身份证申领登记表》或《居民身份证异地受理登记表》。3、申领人在表格上签字确认,交纳证件工本费(损坏换领40元,其余情况换领20元,法律规定有特殊情形的除外)领取《居民身份证领取凭证》和收费收据。4、接到领证通知后本人携带《居民身份证领取凭证》到指定地点领取证件。若申领人急需使用居民身份证,可以自愿申请办理邮寄证件。5、申领人领取居民身份证后,需将以前申领的居民身份证全部交回派出所。 [9]异地受理、挂失申报和丢失招领制度2015年11月,公安部印发《关于建立居民身份证异地受理挂失申报和丢失招领制度的意见》,为降低公民居民身份证被盗用、冒领等风险发生率,方便在外公民办理居民身份证,明确了居民身份证异地受理、挂失申报和丢失招领的制度。 [8]1、异地受理实行居民身份证换领、补领异地受理。根据《居民身份证法》的有关规定,改革现行居民身份证办理机制,对离开常住户口所在地到其他省(自治区、直辖市)合法稳定就业、就学、居住的公民,申请换领、补领居民身份证,由本人向其现居住地公安机关申请,由常住户口所在地公安机关委托现居住地公安机关受理。2、挂失申报就近办理居民身份证挂失申报。全国公安机关户籍派出所、办证大厅受理公民居民身份证挂失申报。公民居民身份证丢失、被盗的,可持居民户口簿到常住户口所在地公安机关申报挂失并办理补领手续;离开常住户口所在地的,可到就近的户籍派出所或者办证大厅申报挂失。符合居民身份证异地受理条件的,可在异地受理点办理补领手续。3、丢失招领设立丢失招领窗口。在全国公安派出所、户政办证大厅设立居民身份证丢失招领窗口,负责接收群众捡拾到的丢失居民身份证,统一录入全国捡拾居民身份证信息库,为丢失居民身份证的群众提供查询服务。居民身份证办理时限公民申请领取(即首次申领)、换领、补领居民身份证并经公安机关审核通过予以办理的,公安机关应当自公民提交《居民身份证申领登记表》或《居民身份证异地受理登记表》之日起六十日内发放居民身份证;交通不便的地区,办理时间可以适当延长,但延长的时间不得超过三十日。对于有条件的地区,可以适当缩短办证时间。 [8]公民在申请领取、换领、补领居民身份证期间,急需使用居民身份证的,可以申请领取临时居民身份证,公安机关应当按照《中华人民共和国临时居民身份证管理办法》的规定及时予以办理。2019年9月1日,山西省公安厅举行新闻发布会,宣布从9月1日21时起,依托“一网通一次办”服务群众、服务企业平台的强大功能,在全省推出居民身份证“当日受理、当日制证、当日出库”,24小时至36小时以内邮寄至办证派出所或个人。跨省通办2022年8月,公安部制定并印发2022年服务经济社会发展助力稳住经济大盘重点措施,其中包括推进首次申领居民身份证“跨省通办”。2022年8月1日起,在长三角、闽赣、川渝黔三个片区的9省市,全面推开区域内首次申领居民身份证“跨省通办”。2022年10月1日起,在全国其他省市逐步启动试点工作,年底前在试点地区实现群众首次申领居民身份证无需回户籍地,可在现居住地就近办理。 [14]证件号码制度播报编辑1999年10月1日,中华人民共和国国务院批准建立了公民身份号码制度,把原本在申领居民身份证时才确立的15位居民身份证号码,替换为出生时编排的终身不变的唯一的18位代码,即公民身份号码。公民身份号码的不仅应用在居民身份证上,也运用于其他领域。国家标准播报编辑18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999《公民身份号码》中做了明确的规定。GB11643-1999《公民身份号码》为GB11643-1989《社会保障号码》的修订版,其中指出将原标准名称“社会保障号码”更名为“公民身份号码”,另外GB11643-1999《公民身份号码》从实施之日起代替GB11643-1989。号码组成播报编辑前6位对应省市区,以首次办理身份证的地址排位,不会根据地址或户籍变化而变动;7至14位为出生年月日;15至17位是同一地址码所标示的区域范围内对同年同月同日生人编订的顺序码。其中第17位表示性别,奇数为男性,偶数为女性;最后一位为校验码。身份证号码是由18位数字组成,分别表示:第1、2位数字表示:所在省份的代码;第3、4位数字表示:所在城市的代码;第5、6位数字表示:所在区县的代码;第7-14位数字表示:出生年、月、日(其中7、8、9、10位是年,11、12位是月,13、14位是日);第15-17位都是同一地址辖区内的,以及同年同月同日出生人的顺序码,同时第17位兼具性别标识功能,男单女双;第18位数字是校检码:可以是0-9的数字,有时也用X表示。 [15]编排规则 [15]尾号X表示什么?作为尾号的身份证校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但是如果尾号是10,那么就得用X来代替,因为如果用10作尾号,那么此人的身份证就变成了19位,而19位的号码违反了国家标准,并且中国计算机应用系统也不承认19位的身份证号码。X是罗马数字的10,用X来代替10,可以保证公民身份证符合国家标准。 [15]可以通过冗余校验的方式来核查身份号码最后的“校验码”是否属实。全国各省、直辖市、自治区的省份代码北京市:11天津市:12河北省:13山西省:14内蒙古自治区:15辽宁省:21吉林省:22黑龙江省:23上海市:31江苏省:32浙江省:33安徽省:34福建省:35江西省:36山东省:37河南省:41湖北省:42湖南省:43广东省:44广西壮族自治区:45海南省:46重庆市:50四川省:51贵州省:52云南省:53西藏自治区:54陕西省:61甘肃省:62青海省:63宁夏回族自治区:64新疆维吾尔自治区:65/香港居民公民身份号码地址码使用810000,澳门居民公民身份号码地址码使用820000,台湾居民公民身份号码地址码使用830000。 [17]注意事项播报编辑最重要的还要学会安全使用身份证,那么,复印身份证又有哪些注意事项呢?1.身份证复印件用完不要随意丢弃,而是要对其进行标注,防止因不法分子冒用造成财产损失;2.使用身份证复印件时,要做标注,最好使用蓝色或黑色标记;3.标注要注明身份证的用途,可写“仅可使用一次、再复印无效”等语句;4.标注分三行写,末尾画横线,要压住身份证部分内容。 [15]适用范围播报编辑《中华人民共和国居民身份证法》规定,如下情况时需要使用身份证:常住户口登记项目变更;兵役登记;结婚登记、收养登记;申请办理出境手续;法律、行政法规规定需要用居民身份证证明身份的其他情形。例如乘坐火车 [10](而且部分站点可以不取车票刷身份证进站乘车 [11])、飞机,乘坐跨市长途汽车实名制,以及寄递快递邮件物品。《中华人民共和国居民身份证法》规定,遇有下列情形时,依法执行职务的人民警察经出示执法证件可查验居民身份证:对有违法犯罪嫌疑的人员,需要查明身份的;依法实施现场管制时,需要查明有关人员身份的;发生严重危害社会治安突发事件时,需要查明现场有关人员身份的;法律规定需要查明身份的其他情形。防伪技术播报编辑第一代:聚酯膜塑封,后期使用激光图案防伪。第二代:身份证是非接触式IC芯片卡,有定向光变色“长城”图案、防伪膜、光变光存储“中国CHINA”字样、缩微字符串“JMSFZ”(汉语拼音:JūMín ShēnFènZhèng,居民身份证)、紫外灯光显现的荧光印刷“长城”图案等防伪技术。非接触式IC芯片第二代身份证内藏非接触式IC芯片,可近距离读取内里资料,应用包括在火车站自动取票机自助取票等等。多拍优选播报编辑市民体验“身份证自助满意拍系统”2018年11月29日,居民身份证相片将实现“多拍优选”,公安部施行深化治安管理“放管服”改革便民利民6项措施,包括涉及简化企业开办程序、压缩开办时间,减轻企业经济负担,减免企业办事证明材料,建立企业内部安全随访制,为群众办理居民身份证和居住证提供便利服务,优化户政管理服务等事项。其中,为群众办理居民身份证和居住证提供便利服务措施提出,居民身份证相片“多拍优选”。群众如果对拍摄的居民身份证相片不满意,可以申请重新拍照3次,从中优选满意相片。办理过居民身份证的群众,2年内再次申请领取居民身份证时,可以使用原相片信息办理。 [12]电子化播报编辑2022年3月11日,在十三届全国人大五次会议闭幕会后的记者会上,时任国务院总理李克强表示,“我们今年要实施一项政策,就是把人们常用的身份证电子化。也就是说,拿着手机在有关事项上一扫码,事就办成了。当然我们也要为不用智能手机的人,特别是老人提供便利,还要保障公民的信息安全和隐私。” [13]身份证“网证”播报编辑是否会推广身份证“网证”?居民身份证“网证”,实质上是居民身份证电子证照,公安部将在今后工作中进行深入研究论证。 [16]补换领播报编辑2023年7月17日起,在四川省范围内推出居民身份证丢失补领损坏换领“全程网办”服务。四川省户籍居民居民身份证损坏或丢失的,可通过登录各市(州)公安“微户政”,经身份核查、人像比对等方式核验通过后,网上申请丢失补领、损坏换领,可不再到公安办证窗口现场申办,实现“全程网办”。 [18]新手上路成长任务编辑入门编辑规则本人编辑我有疑问内容质疑在线客服官方贴吧意见反馈投诉建议举报不良信息未通过词条申诉投诉侵权信息封禁查询与解封©2024 Baidu 使用百度前必读 | 百科协议 | 隐私政策 | 百度百科合作平台 | 京ICP证030173号 京公网安备110000020000

公民身份号码_百度百科

号码_百度百科 网页新闻贴吧知道网盘图片视频地图文库资讯采购百科百度首页登录注册进入词条全站搜索帮助首页秒懂百科特色百科知识专题加入百科百科团队权威合作下载百科APP个人中心公民身份号码播报讨论上传视频中华人民共和国为每个公民从出生之日起编定的唯一的、终身不变的身份代码收藏查看我的收藏0有用+10中华人民共和国公民身份号码是中华人民共和国为每个公民从出生之日起编定的唯一的、终身不变的身份代码,在中华人民共和国公民办理涉及政治、经济、社会生活等权益事务方面广泛使用。中华人民共和国公安部负责公民身份号码的编制和组织实施工作。中文名公民身份号码作    用加强社会管理应    用身份证、户口簿相关规定《国务院关于实行公民身份号码制度的决定》编码对象中华人民共和国公民目录1居民身份证2文件发布3号码制度▪内容简介▪作用▪应用▪编排规则▪尾号X的意义▪各省代码含义▪个人身份比对4国家标准▪简介▪范围▪编码对象5问题解决▪重号解决办法▪挂失办理居民身份证播报编辑中华人民共和国居民身份证样证 [1]身份证是有一定使用期限的有效证件,应在有效期限内使用。第一代身份证分年龄段,有年限限制。但也有的身份证是无期限的,不同地区的规定不一样。文件发布播报编辑1999年8月26日中华人民共和国国务院发布《国务院关于实行公民身份号码制度的决定》(国发[1999]15号),这个文件规定自1999年10月1日起在全国建立和实行公民身份号码制度。号码制度播报编辑内容简介公民身份号码为识别公民身份的重要标识,目前身份证号码已变为18位(原来的身份证号码只有15位,自换发第二代居民身份证后增加至18位,增加的位数是现在的第7、8、18位,分别是年份的公元纪年法原来省去的前两位和末位校验码)。这些数字中包含身份证所属区域、公民出生年月及性别等相关信息,身份证号码不会出现重复情况。作用建立和实行公民身份号码制度,是国家加强社会管理的一项重要基础工作,也是实现社会信息化管理的重要措施,对于促进我国社会主义现代化建设和经济体制改革,以及保护公民的合法权益、方便群众生活等具有十分重要的作用和意义。应用标记在中华人民共和国居民身份证上和所配套的数据库中(因此,1999年后“居民身份证号”就是“公民身份号码”)。标记在中华人民共和国居民户口簿上和所配套的数据库中。标记在中华人民共和国机动车驾驶证上和所配套的数据库中。公民在办理下列事务,需要证明身份时,可以出示公民身份号码:(一)户口登记(二)入学,就业(三)兵役登记(四)选民登记(五)婚姻登记(六)办理公证事务(七)前往边境管理区(八)办理申请出境手续(九)参与诉讼活动(十)办理机动车、船驾驶证和行驶证,非机动车执照(十一)办理个体营业执照(十二)办理个人信贷事务(十三)参加社会保险,领取社会救济(十四)办理搭乘民航飞机手续(十五)购买火车票及乘车(十六)投宿旅店办理登记手续(十七)提取汇款,邮件(十八)寄卖物品(十九)办理银行卡及信用卡(二十)办理其他事务除公安机关依法对被告人采取强制措施可以扣留居民身份证外,其他任何单位和个人不得扣留公民的居民身份证或者作为抵押。编排规则身份证号码是由18位数字组成的,它的编码规则依据国家标准《GB11643》,它们分别表示:(1)前1、2位数字表示:所在省份的代码;(2)第3、4位数字表示:所在城市的代码;(3)第5、6位数字表示:所在区县市(县级市)的代码;(4)第7~14位数字表示:出生年、月、日;7.8.9.10位是年,11.12位是月13.14位是日(5)第15、16、17位是顺序码,顺序码是表示同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号。第17位数字表示性别:奇数表示男性,偶数表示女性;(6)第18位数字是校检码:校检码可以是0~9的数字,有时也用x表示。尾号X的意义身份证的号码是按照国家标准编制的,由18位组成:前六位为行政区划代码,第七至第十四位为出生日期码,第15至17位为顺序码,第18位为校验码。作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么此人的身份证就变成了19位,而19位的号码违反了国家标准,并且我国的计算机应用系统也不承认19位的身份证号码。Ⅹ是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准。15位的身份证号:dddddd yymmdd xx p18位的身份证号:dddddd yyyymmdd xx p y其中dddddd为地址码(省地县三级)18位中的和15位中的不完全相同:yymmdd yyyymmdd 为出生年月日;xx为顺号类编码;p为性别;18位号码中末尾的y为校验码,在网上可以找到算法;前17位的ascii码值经位移、异或运算,结果不在0-9的令其为x。各省代码含义一、四个直辖市:1、北京112、天津123、上海314、重庆50二、五个自治区:1、内蒙古152、新疆653、西藏544、宁夏645、广西45三、两个特别行政区:1、香港特别行政区8100002、澳门特别行政区820000四、23个省 :1、黑龙江省232、吉林省223、辽宁省214、河北省135、山西省146、青海省637、山东省378、河南省419、江苏省3210、安徽省3411、浙江省3312、福建省3513、江西省3614、湖南省4315、湖北省4216、广东省4417、海南省4618、甘肃省6219、陕西省6120、四川省5121、贵州省5222、云南省5323、台湾省710000个人身份比对公安部负责公民身份号码的编制和组织实施工作。公民个人在进行社会和经济活动(例如到电信、银行办理相关业务)时,向有关机构主动提交身份证件,有关机构工作人员(称为“核查人”或“用户”)将公民(称为“被核查人”)主动提交的姓名、身份号码等信息通过电信运营商的网络通道传送至公安部“全国公民身份信息数据库”进行比对,得到“一致”或“不一致”的比对结果,如果“一致”还可以进一步比对照片,以确认照片与身份证提交者本人是否一致,不提供任何其他信息。根据不同的身份,公民的身份证号码各不相同。国家标准播报编辑简介《国家标准GB11643-1999公民身份号码》18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999《公民身份号码》中做了明确的规定。 GB11643-1999《公民身份号码》为GB11643-1989《社会保障号码》的修订版,其中指出将原标准名称"社会保障号码"更名为"公民身份号码",另外GB11643-1999《公民身份号码》从实施之日起代替GB11643-1989。GB11643-1999《公民身份号码》主要内容如下:范围该标准规定了公民身份号码的编码对象、号码的结构和表现形式,使每个编码对象获得一个唯一的、不变的法定号码。编码对象公民身份号码的编码对象是具有中华人民共和国国籍的公民。问题解决播报编辑重号解决办法纠正原则:对重号双方现仍在第一次编码的派出所辖区居住的,由双方协商,保留其中一人的身份证号码,更改另一个人的;对重号双方都已迁出第一次身份证号码编码的派出所辖区的,谁先发现谁先更改号码,保留另一重号人的身份证号码;对于一方迁出第一次身份证号码编码的派出所辖区的,由仍在派出所辖区一方更改。以上情况下变更居民身份证是免费的。凡是变更身份证号码的,都由当地派出所开具《居民身份证号码变更证明》,以方便更改其他证件。更改身份证号码中的经济损失,例如新身份证的工本费,公安部门可以承担,但给居民带来的间接损失,如补办其他证件的费用得由居民自行承担。挂失办理1.身份证不需要挂失,也不需要公告声明遗失,挂失和公告无任何法律依据。2.公民只能使用自己的身份证来证明自己的身份。利用证件冒用他人身份或者他人冒用你的身份,并不代表被冒名者参与了某项社会活动。3.冒用他人身份证违法犯罪或者侵犯民事权利,仍然由行为人承担法律责任,被冒名者无须举证证明自己清白。 对于违法犯罪,是由司法机关调查取证来证明你有违法犯罪行为,而且要形成证据链,证据还要互相印证;对于民事侵权,谁主张、谁举证。单靠身份证是无法让被冒名者承担责任的。4.根据居民身份证法,“居民身份证丢失的,应当申请补领”。5.当然公告声明遗失的行为,是自愿的行为。6.你现在的身份证和丢失的身份证还是都能使用的,无法把丢失的注销掉。两者的区别是印在身份证表面的“有效期限”。新手上路成长任务编辑入门编辑规则本人编辑我有疑问内容质疑在线客服官方贴吧意见反馈投诉建议举报不良信息未通过词条申诉投诉侵权信息封禁查询与解封©2024 Baidu 使用百度前必读 | 百科协议 | 隐私政策 | 百度百科合作平台 | 京ICP证030173号 京公网安备110000020000

身份证号码的每一位分别代表什么含义? - 知乎

身份证号码的每一位分别代表什么含义? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册身份证电话号码居民身份证法身份证号码的每一位分别代表什么含义?身份证号码的每一位分别代表什么含义?显示全部 ​关注者18被浏览126,106关注问题​写回答​邀请回答​添加评论​分享​6 个回答默认排序尚尚​ 关注份证号码是由18位数字组成的,它们分别表示:(1)前1、2位数字表示:所在省份的代码;(2)第3、4位数字表示:所在城市的代码;(3)第5、6位数字表示:所在区县的代码;(4)第7~14位数字表示:出生年、月、日(7.8.9.10位是年,11.12位是月,13.14位是日);(5)第15、16位数字表示:所在地的派出所的代码;(6)第17位数字表示性别:奇数表示男性,偶数表示女性;(7)第18位数字是校检码:校检码可以是0~9的数字,有时也用x表示。发布于 2020-02-21 18:14​赞同 81​​12 条评论​分享​收藏​喜欢收起​神器分享​ 关注用一张图片看明白: 发布于 2022-04-10 10:12​赞同 1​​添加评论​分享​收藏​喜欢

身份证国家标准及编码规则 - 知乎

身份证国家标准及编码规则 - 知乎首发于大数据在公安行业实践切换模式写文章登录/注册身份证国家标准及编码规则黄大先生商业现实主义的产创新兵18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999《公民身份号码》中做了明确的规定。 GB11643-1999《公民身份号码》为GB11643-1989《社会保障号码》的修订版,其中指出将原标准名称“社会保障号码”更名为“公民身份号码”,另外GB11643-1999《公民身份号码》从实施之日起代替GB11643-1989。 居民身份证的有效期限分为5年、10年、20年、长期四种。16岁以下的,发给有效期为5年的居民身份证;16周岁至25周岁的,发给有效期为10年的居民身份证;26周岁至45周岁的,发给有效期为20年的居民身份证;46周岁以上的,发给长期有效的居民身份证。身份证号码编码规则:公民身份号码是特征组合码,由十七位数字本体码和一位数字或字符(X)校验码组成。排列顺序从左至右依次为:1、六位地址码: “前2位”表示省、直辖市、自治区【11-15】京、津、冀、晋、蒙【21-23】 辽、吉、黑 【31-37】沪、苏、浙、皖、闽、赣、鲁 【41-46】豫、鄂、湘、粤、桂、琼 【50-54】渝、川、贵、云、藏 【61-65】陕、甘、青、宁、新 “后4位”表示市、县、区。2、八位出生日期码: 8位出生日期码采用8位定长日期表示法:4位年、2位月、2位日。3、三位顺序码和一位校验码:3位顺序码表示同一日出生的次序和性别,奇数代表男性,偶数代表女性。最后1位校验码用“0-9”和“X”表示。 校验码是通过数学计算得出来的。校验码计算公式:(12-∑(Ai×Wi)(mod 11))mod 11。i—表示身份证号码从左至右的位置序号,取值1--17;Ai—表示第i位上的数字;Wi—表示第i位上的加权因子。加权因子计算公式:Wi=2^(i-1)(mod 11)校验码计算结果为“0--10”11个数字之一,其中“10”用“X”表示。发布于 2020-06-26 20:05​赞同 6​​添加评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录大数据在公安行业实践探讨公安数据更智能,大数据场景化服务于实

身份证号码都有何意义? - 知乎

身份证号码都有何意义? - 知乎切换模式写文章登录/注册身份证号码都有何意义?狐狐狐狐千岁第二代身份证号码共计18位数字(老版身份证除外),由四部分组成:地址码(1-6位)、生日期码(7-12位)、顺序码(15-17位)以及校验码(18位)。今天就来具体讲讲身份证号码中各部分内容的含义,让你能够迅速读懂身份证号码上的信息。一、地址码身份证前六位为地址码,即个人户口所在地的代码。其中1-2位为省级行政区,3-4位为地级行政区,5-6位为县级行政区。由于我国地级、县级行政区太多,咱今天就重点盘点下34个省级行政区(23个省+5个自治区+4个直辖市+2个特别行政区)对应的代码。身份证号码第一位数是过去的大区代码,指代新中国成立后划分的6大军区。这6大军区分别为华北(1)、东北(2)、华东(3)、中南(4)、西南(5)和西北(6)军区。第二位为大区内省市编码,如11就指代华北区的北京市,32就指代华东区的江苏省,具体情况如下图(建议码住):1开头:华北地区2开头:东北地区3开头:华东地区4开头:中南地区5开头:西南地区6开头:西北地区当然不能忘了我们的港澳台同胞(7、8开头)最后再来张大合影!祖国风光无限好!所以,仅凭身份证号码前两位数,你就可以知道对方是哪的人了,非常实用!比如,对方身份证是36开头的,江西老表!假若是45开头的,广西老妹!假若是50开头的,重庆辣妹儿!假若是44开头的......话说你们真的吃福建人吗?至于身份证号码3-6位,只需知道3-4位代表地级行政区,5-6位代表县级行政区即可。毕竟数量太多,没必要全记住。举几个例子说明下即可:省身份证号码前六位:321088——江苏省(32)扬州市(10)江都市(88)。直辖市身份证号码前六位:310104——上海市(31)徐汇区(04),其中第3-4位——01表示上海市区。自治区身份证号码前六位:152530——内蒙古自治区(15)锡林郭勒盟(25)正蓝旗(30)。二、生日期码这个最好理解了,就是你的生日。第7至10位为你的出生年份,11-12位为月份,13-14位为日期。假如你是1995年1月7日出生,那么身份证号码的7-14位就是固定的,为19950107。三、顺序码何为顺序码?顺序码就相当于给同一天、同一地方出生的人排个序,以防重号。因为同一天、同一地方出生的人,身份证号码前14位是一模一样的,所以需在后面增加特殊的号码来加以区分。顺序码是县级公安机关所辖派出所的分配码,每个派出所分配码为10个连续号码,如“000-009”或“060-069”,其中单数分配给男性,双数则分配给女性。因此,只要身份证号第17位为奇数,则为男性。若为偶数,则为女性。故第17位也可认作性别识别码。四、检验码作为尾号的校验码,是由前面17位数字根据特定的公式计算出来的,其结果共有11种可能:0-9以及X。那这个X是啥呢?其实,X即为罗马数字的10,表明身份证号前17位根据特定公式计算出来的值为10。之所以要用罗马数字X替代,是因为如果用10做尾号,那么身份证号码就变成了19位,违背了身份证号18位设置的标准,也无法被机器所识别。这时肯定会有好奇的小伙伴提问,校验码究竟是根据什么特定的公式来计算呢?为何还会得出一个10呢?鉴于这个公式讲解起来需要一定的数学基础,先来考考你的数学基础吧。什么?这你都不会?这不小学三年级的题吗?看来也没必要再讲解这个公式了。其实,这个公式大家也没必要知道,公式略微复杂,大家可自行上网搜索。摘自百度百科,感兴趣可以了解下那为何叫做校验码?因为它可用来检验身份证号码的正确性。鉴于身份证号码较长,在输入时难免会出错,为避免不必要的麻烦,校验码得以诞生。根据校验码的计算公式,若前17位数有一位填错,则得出的校验码会与正确的校验码不同,系统则会报错。而如果是最后一位校验码填错,则与前17位数字根据计算公式得出的结果有出入,系统同样会报错。因此,但凡身份证号码有一位填错,系统就能识别出来并报错,进而大大降低输错身份证号码的概率。可如果前面的数字也填错,最后一位校验码也填错呢(概率已经很小很小了)?你咋不上天呢?身份证冷知识你知道吗?身份证的国徽面是正面,而有个人靓照的那一面才是背面哦。(百度百科截图)内容延伸细心的你有没有发现,除西南大区(5开头)以外,其他大区的省市代码第二位都是从1开始的,如华北是从11开始,华东是从31开始,可为什么西南大区是从50开始而不是从51开始的呢?为啥西南大区有个50(重庆),而其他大区就没有10、20或是30呢?为什么重庆是50呢?首先得先了解这样一个规则:直辖市代码必须排在大区前。这也是为何华东会从31(上海市)开始,华北会从11(北京市)和12(天津市)开始。作为西南大区唯一一个直辖市,重庆市也的确应当排在最前,可为什么它的代码是50而不是51呢?因为重庆在直辖前隶属于四川,身份证号码也是51开头,所以重庆老一辈居民的旧身份证号码依然是51开头。1997年6月,重庆直辖市政府机构正式挂牌,重庆也就单独成了直辖市,与四川省同级。可当时51已经被四川占了怎么办?而且直辖市又得排在大区前啊,所以就只好选择51前的数字——50了。所以说啊,川渝本就是一家亲。感谢你的阅读,如果喜欢别忘了点个赞呦也欢迎关注微信公众号:狐狐狐狐千岁每月更新趣味知识讲解~发布于 2022-02-11 22:24身份证号码我要涨知识​赞同 51​​4 条评论​分享​喜欢​收藏​申请

一、身份证号码的编码规则及校验 - 知乎

一、身份证号码的编码规则及校验 - 知乎首发于金融加密算法切换模式写文章登录/注册一、身份证号码的编码规则及校验丁盛金融软件领域从业者原文地址:前言根据最新修订的《中华人民共和国居民身份证法》第二十三条规定,依照《中华人民共和国居民身份证条例》领取的居民身份证,自2013年1月1日起停止使用。即一代身份证已于2013年1月1日起停止使用,本文内容适用于二代身份证,如无特殊说明,本文中所说的身份证皆指二代身份证。笔者目前使用的jdk版本是1.6.0_29,Eclipse版本是Juno Release,Build id 20120614-1722。如无特殊说明,本文所有的Java代码都是基于此。本文包含大量数学公式和Java代码,手机端浏览体验较差,可在手机端浏览文字性内容,数学公式和Java代码在PC端浏览,同时建议准备好纸、笔用于数学公式的演算。具有一定数学基础的读者也可以忽略此条建议。本文中提供的Java代码都是笔者逐行编写、反复斟酌,以求能够抛砖引玉,使初学者可以孜孜不倦,在Java的学习道路上更进一层楼。本文内容,不足之处,欢迎大家批评指正。修订记录参考资料中华人民共和国居民身份证法中华人民共和国国家标准 GB/T 2260-2007 中华人民共和国行政区划代码中华人民共和国国家标准 GB 11643-1999 公民身份证号码中华人民共和国国家标准 GB/T 17710-1999 数据处理 校验码系统中华人民共和国国家标准 GB/T 17710-2008 信息技术 安全技术 校验字符系统ISO 7064:1983 Data processing - Check character systemsISO/IEC 7064:2003 Information technology - Security techniques - Check character systems身份证号码的编码规则身份证号码共18位,由17位本体码和1位校验码组成。 前6位是地址码,表示登记户口时所在地的行政区划代码,依照《中华人民共和国行政区划代码》国家标准(GB/T2260)的规定执行; 7到14位是出生年月日,采用YYYYMMDD格式; 15到17位是顺序码,表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编订的顺序号,顺序码的奇数分配给男性,偶数分配给女性,即第17位奇数表示男性,偶数表示女性; 第18位是校验码,采用ISO 7064:1983, MOD 11-2校验字符系统,计算规则下一章节说明。一代身份证与二代身份证的区别在于: 一代身份证是15位,二代身份证是18位;一代身份证出生年月日采用YYMMDD格式,二代身份证出生年月日采用YYYYMMDD格式; 一代身份证无校验码,二代身份证有校验码。校验码计算规则身份证号码中各个位置上的号码字符值应满足下列公式的校验: \sum_{i=1}^{18} ( a_{i} \times W_{i} ) \equiv 1 \pmod{11} i 表示号码字符从右至左包括校验码字符在内的位置序号;a_{i} 表示第i位置上的号码字符值, a_{1} 是身份证号码第18位校验码;W_{i} i位置上的加权因子,加权因子计算公式: W_{i} = 2^{i-1} \pmod{11} 举例说明:笔者身份证号码为370683198901117657,根据上述公式进行校验。 \sum_{i=1}^{18} ( a_{i} \times W_{i} ) = 397 \equiv 1 \pmod{11} 大家可以根据此方法验证自己的身份证号码。了解了身份证号码的校验公式后,根据同余定理可证得身份证号码校验码的计算公式: 当 a_{1} 值等于10时,用罗马数字符X表示。此处需要注意:是罗马数字X,不应理解为英文字母X。实际应用在金融行业软件系统中,对于身份证号码的采集、校验用途甚广。身份证号码前6位,可采集客户户籍所在地,只需将国家标准GB/T 2260中定义的行政区划代码导入数据库,程序中进行映射即可;但需要注意的是,行政区划代码每隔几年会修订一次,从笔者手上的2007版来看,共经历了1982年、1984年、1986年、1988年、1991年、1995年、1999年、2002年、2007年九次修订,所以要预留更新机制; 身份证号码7到14位,可采集客户的出生日期、年龄、生日; 身份证号码17位,可采集客户的性别,奇数表示男性,偶数表示女性; 身份证号码的验证渠道,不管验证成功与否,往往都是收费的,比如银行渠道、公安部渠道,在发往这些渠道验证之前,先对其进行长度、正则表达式、校验码的验证,能够适当提高收费验证的成功率,节省成本支出;而且也可以提升用户体验,在用户输入错误时及时反馈而不必等待验证渠道结果的返回。下面,就以实际代码为例,说明身份证号码校验的方法。首先,给出身份证号码的正则表达式:/**

* 18位二代身份证号码的正则表达式

*/

public static final String REGEX_ID_NO_18 = "^"

+ "\\d{6}" // 6位地区码

+ "(18|19|([23]\\d))\\d{2}" // 年YYYY

+ "((0[1-9])|(10|11|12))" // 月MM

+ "(([0-2][1-9])|10|20|30|31)" // 日DD

+ "\\d{3}" // 3位顺序码

+ "[0-9Xx]" // 校验码

+ "$";

/**

* 15位一代身份证号码的正则表达式

*/

public static final String REGEX_ID_NO_15 = "^"

+ "\\d{6}" // 6位地区码

+ "\\d{2}" // 年YYYY

+ "((0[1-9])|(10|11|12))" // 月MM

+ "(([0-2][1-9])|10|20|30|31)" // 日DD

+ "\\d{3}"// 3位顺序码

+ "$";校验身份证号码:/**

* 校验身份证号码

*

*

* 适用于18位的二代身份证号码

*

*

* @param IDNo18 身份证号码

* @return true - 校验通过

* false - 校验不通过

* @throws IllegalArgumentException

* 如果身份证号码为空或长度不为18位或不满足身份证号码组成规则

* 6位地址码+

* 出生年月日YYYYMMDD+3位顺序码

* +0~9或X(x)校验码

*/

public static boolean checkIDNo(String IDNo18) {

// 校验身份证号码的长度

if (!checkStrLength(IDNo18, 18)) {

throw new IllegalArgumentException();

}

// 匹配身份证号码的正则表达式

if (!regexMatch(IDNo18, REGEX_ID_NO_18)) {

throw new IllegalArgumentException();

}

// 校验身份证号码的验证码

return validateCheckNumber(IDNo18);

}

/**

* 校验字符串长度

*

* @param inputString 字符串

* @param len 预期长度

* @return true - 校验通过

* false - 校验不通过

*/

private static boolean checkStrLength(String inputString, int len) {

if (inputString == null || inputString.length() != len) {

return false;

}

return true;

}

/**

* 匹配正则表达式

*

* @param inputString 字符串

* @param regex 正则表达式

* @return true - 校验通过

* false - 校验不通过

*/

private static boolean regexMatch(String inputString, String regex) {

return inputString.matches(regex);

}

/**

* 校验码校验

*

* 适用于18位的二代身份证号码

*

*

* @param IDNo18 身份证号码

* @return true - 校验通过

* false - 校验不通过

*/

private static boolean validateCheckNumber(String IDNo18) {

// 加权因子

int[] W = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };

char[] IDNoArray = IDNo18.toCharArray();

int sum = 0;

for (int i = 0; i < W.length; i++) {

sum += Integer.parseInt(String.valueOf(IDNoArray[i])) * W[i];

}

// 校验位是X,则表示10

if (IDNoArray[17] == 'X' || IDNoArray[17] == 'x') {

sum += 10;

} else {

sum += Integer.parseInt(String.valueOf(IDNoArray[17]));

}

// 如果除11模1,则校验通过

return sum % 11 == 1;

}计算校验码:/**

* 计算身份证号码的校验码

*

* 适用于18位的二代身份证号码,身份证号码由17位本体码和1位校验码组成

*

*

* @param masterNumber 本体码

* @return 身份证号码

* @throws IllegalArgumentException

* 如果本体码为空或长度不为17位或不满足本体码组成规则

* 6位地址码+

* 出生年月日YYYYMMDD+3位顺序码

*/

public static String computeIDNoCheckNumber(String masterNumber) {

// 校验本体码的长度

if (!checkStrLength(masterNumber, 17)) {

throw new IllegalArgumentException();

}

// 匹配本体码的正则表达式

if (!regexMatch(masterNumber, REGEX_MASTER_NUMBER)) {

throw new IllegalArgumentException();

}

// 计算校验码

String checkNumber = computeCheckNumber(masterNumber);

// 返回本体码+校验码=完整的身份证号码

return masterNumber + checkNumber;

}

/**

* 计算校验码

*

* 适用于18位的二代身份证号码

*

*

* @param masterNumber 本体码

* @return 校验码

*/

private static String computeCheckNumber(String masterNumber) {

// 加权因子

int[] W = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };

char[] masterNumberArray = masterNumber.toCharArray();

int sum = 0;

for (int i = 0; i < W.length; i++) {

sum += Integer.parseInt(String.valueOf(masterNumberArray[i])) * W[i];

}

// 根据同余定理得到的校验码数组

String[] checkNumberArray = { "1", "0", "X", "9", "8", "7", "6", "5", "4",

"3", "2" };

// 得到校验码

String checkNumber = checkNumberArray[sum % 11];

// 返回校验码

return checkNumber;

}虽然15位的一代身份证已经停用,但是难免有需要用到将15位的一代身份证升级为18位的二代身份证的情形,代码示例如下:/**

* 15位一代身份证号码升级18位二代身份证号码

*

* 为15位的一代身份证号码增加年份的前2位和最后1位校验码

*

*

* @param IDNo15 15位的一代身份证号码

* @return 18位的二代身份证号码

*/

public static String updateIDNo15to18(String IDNo15) {

// 校验身份证号码的长度

if (!checkStrLength(IDNo15, 15)) {

throw new IllegalArgumentException();

}

// 匹配身份证号码的正则表达式

if (!regexMatch(IDNo15, REGEX_ID_NO_15)) {

throw new IllegalArgumentException();

}

// 得到本体码,因一代身份证皆为19XX年生人,年份中增加19,组成4位

String masterNumber = IDNo15.substring(0, 6) + "19" + IDNo15.substring(6);

// 计算校验码

String checkNumber = computeCheckNumber(masterNumber);

// 返回本体码+校验码=完整的身份证号码

return masterNumber + checkNumber;

}同余同余的定义给定一个正整数m,如果两个整数a和b满足a-b能够被m整除,即 (a-b)/m 得到一个整数,那么就称整数a与b对模m同余,记作 a \equiv b \pmod m 。同余的性质反身性: a \equiv a \pmod m ;对称性:若 a \equiv b \pmod m ,则 b \equiv a \pmod m ;传递性:若 a \equiv b \pmod m , b \equiv c \pmod m ,则 a \equiv c \pmod m ;同余式相加:若 a \equiv b \pmod m , b \equiv d \pmod m ,则 a \pm c \equiv b \pm d \pmod m ;同余式相乘:若 a \equiv b \pmod m , c \equiv d \pmod m ,则 ac \equiv bd \pmod m 。校验码计算规则章节中,用到了以下公式 ( a + b ) \pmod{m} = ( a \mod m + b \mod m ) \pmod{m} 我们以此为例进行证明,设则校验字符系统关于校验字符系统,其国际标准ISO 7064有2个版本,分别是ISO 7064:1983和ISO/IEC 7064:2003,从内容上来说,除了表面的调整,本质上没有区别,我想可以理解为是IEC成立后对其工作范围主权的宣示。那么,对应的国家标准,也有了2个版本,分别是GB/T 17710-1999和GB/T 17710-2008,基本上保证了对国际标准的高水准翻译水平,使英文阅读能力欠佳的读者可以通过国家标准来体会国际标准制定的严谨,并从中受益。标准中,提供了如下几个校验字符系统,基本涵盖日常所需。身份证号码校验使用的ISO 7064, MOD 11-2,便是其中之一。在实际项目中,可按需选用。表格中可见,校验字符系统,包括纯系统和混合系统。使用一个模数的称为纯系统,系统名称中MOD后第1个数字是模数,第2个数字是基数;使用两个模数的称为混合系统,系统名称中MOD后的2个数字都是模数。纯系统纯系统又包括使用一个校验字符和使用两个校验字符。使用一个校验字符的纯系统与使用两个校验字符的纯系统本质上是相同的,都遵守校验公式:\sum_{i=1}^{n} ( a_{i} \times r^{i-1} ) \equiv 1 \pmod{M} n - 包括校验字符在内的字符串的字符个数;i - 表示从右至左包括校验码字符在内的字符的位置索引,即最右边的字符 i=1 ;a_{i} - 表示第i位置上字符值;r - 基数;M - 模数。只不过,使用一个校验字符的纯系统与使用两个校验字符的纯系统在计算校验字符的方式上略有不同: 使用一个校验字符的纯系统的校验字符计算公式 其中 a_{1} 是校验字符, r^{i-1} 也可以使用 W_{i} 替代, W_{i} = r^{i-1} \pmod{M} 。 使用两个校验字符的纯系统的校验字符计算公式其中 a_{2} 和 a_{1} 是校验字符, r^{i-1} 也可以使用 W_{i} 替代, W_{i} = r^{i-1} \pmod{M} 。纯系统有两种基本的计算方法,纯系统递归法和纯系统多项式法:递归法从左往右计算:( \cdots ((a_{n} \times r + a_{n-1}) \times r + a_{n-2}) \times r + \cdots + a_{1}) \equiv 1 \pmod M 多项式法 使用 \sum 公式表示: \sum_{i=1}^{n}(a_{i} \times r^{i-1} \pmod{M}) \equiv 1 \pmod M 其实递归法的计算完全展开,得到的也就是多项式法,所以两种计算方法产生相同的结果。混合系统混合系统使用一个校验字符,遵守校验公式: ( \cdots ((((((M+a_{n})||{M}\times 2)|{(M+1)}+a_{n-1})||{M}\times 2)|{(M+1)}+ \cdots + a_{i})||{M}\times 2)|{(M+1)} \cdots +a_{1})||_{M}=1 n - 包括校验字符在内的字符串的字符个数;i - 表示从右至左包括校验码字符在内的字符的位置索引,即最右边的字符 i=1 ;a_{i} - 表示第i位置上字符值;M 和 (M+1) - 两个模数;||_{M} - 除以$ M $后的余数,如果其值为0,则用 M 代替;|_{(M+1)} - 除以 (M+1) 后的余数,在经过上述处理后,余数绝不会为0。上述公式本身就是递归法,无法展开,因此混合系统仅支持递归法计算,不支持多项式法。最后,附上大家喜闻乐见的代码。package com.godson.util;

import java.math.BigInteger;

import java.util.Arrays;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

/**

* ISO7064工具类

*

* 使用ISO7064规范中定义的校验字符系统进行字符串的校验以及生成校验字符

*

*

*/

public class ISO7064Util {

/**

* ISO7064规范中定义的校验字符系统

*

*

  • ISO 7064, MOD 11-2使用 {@link #ISO_7064_MOD_11_2}表示

    *

  • *

  • ISO 7064, MOD 37-2使用{@link #ISO_7064_MOD_37_2}表示
  • *

  • ISO 7064, MOD 97-10使用{@link #ISO_7064_MOD_97_10}

    * 表示

  • *

  • * ISO 7064, MOD 661-26使用 {@link #ISO_7064_MOD_661_26}表示

    *

  • *

  • ISO 7064, MOD 1271-36使用

    * {@link #ISO_7064_MOD_1271_36}表示

  • *

  • ISO 7064, MOD 11,10使用

    * {@link #ISO_7064_MOD_11_HYBRID_10}表示

  • *

  • ISO 7064, MOD 27,26使用

    * {@link #ISO_7064_MOD_27_HYBRID_26}表示

  • *

  • ISO 7064, MOD 37,36使用

    * {@link #ISO_7064_MOD_37_HYBRID_36}表示

  • */

    public enum Designation {

    /** ISO 7064, MOD 11-2 */

    ISO_7064_MOD_11_2,

    /** ISO 7064, MOD 37-2 */

    ISO_7064_MOD_37_2,

    /** ISO 7064, MOD 97-10 */

    ISO_7064_MOD_97_10,

    /** ISO 7064, MOD 661-26 */

    ISO_7064_MOD_661_26,

    /** ISO 7064, MOD 1271-36 */

    ISO_7064_MOD_1271_36,

    /** ISO 7064, MOD 11,10 */

    ISO_7064_MOD_11_HYBRID_10,

    /** ISO 7064, MOD 27,26 */

    ISO_7064_MOD_27_HYBRID_26,

    /** ISO 7064, MOD 37,36 */

    ISO_7064_MOD_37_HYBRID_36

    }

    /**

    * 计算校验字符

    *

    * @param withoutCheckCharacterString 不含校验字符的字符串

    * @param designation 校验字符系统

    * @return 校验字符

    * @throws IllegalArgumentException

    * 如果字符串不匹配对应校验字符系统的正则表达式

    */

    public static String computeCheckCharacter(

    String withoutCheckCharacterString, Designation designation) {

    // 检查字符串是否匹配对应校验字符系统的正则表达式

    if (!RegexMatcher.withoutCheckCharacterStringIsMatch(

    withoutCheckCharacterString, designation)) {

    throw new IllegalArgumentException();

    }

    // 计算校验字符

    return CheckCharacterComputor.compute(withoutCheckCharacterString,

    designation);

    }

    /**

    * 校验字符串

    *

    * @param withCheckCharacterString 含校验字符的字符串

    * @param designation 校验字符系统

    * @return true - 校验通过

    * false-校验不通过

    * @throws IllegalArgumentException

    * 如果字符串不匹配对应校验字符系统的正则表达式

    */

    public static boolean checkString(String withCheckCharacterString,

    Designation designation) {

    // 检查字符串是否匹配对应校验字符系统的正则表达式

    if (!RegexMatcher.withCheckCharacterStringIsMatch(

    withCheckCharacterString, designation)) {

    throw new IllegalArgumentException();

    }

    // 校验字符串

    return CheckCharacterSystemValidator.validate(withCheckCharacterString,

    designation);

    }

    /**

    * 正则表达式匹配器

    *

    * 检查字符串是否匹配对应校验字符系统的正则表达式

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    系统名称适用范围校验码数目及类型
    ISO 7064, MOD 11-2数字1位数字或附加符X
    ISO 7064, MOD 37-2字母数字1位数字或字母或附加符*
    ISO 7064, MOD 97-10数字2位数字
    ISO 7064, MOD 661-26字母2位字母
    ISO 7064, MOD 1271-36字母数字2位数字或字母
    ISO 7064, MOD 11,10数字1位数字
    ISO 7064, MOD 27,26字母1位字母
    ISO 7064, MOD 37,36字母数字1位数字或字母

    */

    private static class RegexMatcher {

    /**

    * 检查不含校验字符的字符串是否匹配对应校验字符系统的正则表达式

    *

    * @param withoutCheckCharacterString 不含校验字符的字符串

    * @param designation 校验字符系统

    * @return true - 匹配

    * false - 不匹配

    */

    static boolean withoutCheckCharacterStringIsMatch(

    String withoutCheckCharacterString, Designation designation) {

    return regexMatch(withoutCheckCharacterString,

    REGEX_MAPPING_WITHOUT_CHECK_CHARACTER_STRING

    .get(designation));

    }

    /**

    * 检查有校验字符的字符串是否匹配对应校验字符系统的正则表达式

    *

    * @param withCheckCharacterString 含校验字符的字符串

    * @param designation 校验字符系统

    * @return true - 匹配

    * false - 不匹配

    */

    static boolean withCheckCharacterStringIsMatch(

    String withCheckCharacterString, Designation designation) {

    return regexMatch(withCheckCharacterString,

    REGEX_MAPPING_WITH_CHECK_CHARACTER_STRING.get(designation));

    }

    /** 数字正则表达式 */

    static final String REGEX_NUMBERIC_STRINGS = "^[0-9]+$";

    /** 含补充校验字符X的数字正则表达式 */

    static final String REGEX_NUMBERIC_STRINGS_WITH_SUPPLEMENTARY_CHECK_CHARACTER = "^[0-9]+[0-9X]$";

    /** 字母正则表达式 */

    static final String REGEX_ALPHABETIC_STRINGS = "^[A-Z]+$";

    /** 字母数字正则表达式 */

    static final String REGEX_ALPHANUMBERIC_STRINGS = "^[0-9A-Z]+$";

    /** 含补充校验字符*的字母数字表达式 */

    static final String REGEX_ALPHANUMBERIC_STRINGS_WITH_SUPPLEMENTARY_CHECK_CHARACTER = "^[0-9A-Z]+[0-9A-Z*]$";

    /** 校验字符系统对应的正则表达式(不含校验字符) */

    @SuppressWarnings("serial")

    static final Map REGEX_MAPPING_WITHOUT_CHECK_CHARACTER_STRING = new HashMap() {

    {

    put(Designation.ISO_7064_MOD_11_2, REGEX_NUMBERIC_STRINGS);

    put(Designation.ISO_7064_MOD_37_2, REGEX_ALPHANUMBERIC_STRINGS);

    put(Designation.ISO_7064_MOD_97_10, REGEX_NUMBERIC_STRINGS);

    put(Designation.ISO_7064_MOD_661_26, REGEX_ALPHABETIC_STRINGS);

    put(Designation.ISO_7064_MOD_1271_36,

    REGEX_ALPHANUMBERIC_STRINGS);

    put(Designation.ISO_7064_MOD_11_HYBRID_10,

    REGEX_NUMBERIC_STRINGS);

    put(Designation.ISO_7064_MOD_27_HYBRID_26,

    REGEX_ALPHABETIC_STRINGS);

    put(Designation.ISO_7064_MOD_37_HYBRID_36,

    REGEX_ALPHANUMBERIC_STRINGS);

    }

    };

    /** 校验字符系统对应的正则表达式(含校验字符) */

    @SuppressWarnings("serial")

    static final Map REGEX_MAPPING_WITH_CHECK_CHARACTER_STRING = new HashMap() {

    {

    put(Designation.ISO_7064_MOD_11_2,

    REGEX_NUMBERIC_STRINGS_WITH_SUPPLEMENTARY_CHECK_CHARACTER);

    put(Designation.ISO_7064_MOD_37_2,

    REGEX_ALPHANUMBERIC_STRINGS_WITH_SUPPLEMENTARY_CHECK_CHARACTER);

    put(Designation.ISO_7064_MOD_97_10, REGEX_NUMBERIC_STRINGS);

    put(Designation.ISO_7064_MOD_661_26, REGEX_ALPHABETIC_STRINGS);

    put(Designation.ISO_7064_MOD_1271_36,

    REGEX_ALPHANUMBERIC_STRINGS);

    put(Designation.ISO_7064_MOD_11_HYBRID_10,

    REGEX_NUMBERIC_STRINGS);

    put(Designation.ISO_7064_MOD_27_HYBRID_26,

    REGEX_ALPHABETIC_STRINGS);

    put(Designation.ISO_7064_MOD_37_HYBRID_36,

    REGEX_ALPHANUMBERIC_STRINGS);

    }

    };

    static boolean regexMatch(String inputString, String regex) {

    Pattern pattern = Pattern.compile(regex);

    Matcher matcher = pattern.matcher(inputString);

    return matcher.matches();

    }

    }

    /** 适用于数字的校验字符系统的数值对应表 */

    private static final String[] NUMBERIC_STRINGS = { "0", "1", "2", "3", "4",

    "5", "6", "7", "8", "9", "X" };

    /** 适用于字母的校验字符系统的数值对应表 */

    private static final String[] ALPHABETIC_STRINGS = { "A", "B", "C", "D",

    "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q",

    "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };

    /** 适用于字母数字的校验字符系统的数值对应表 */

    private static final String[] ALPHANUMBERIC_STRINGS = { "0", "1", "2", "3",

    "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G",

    "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T",

    "U", "V", "W", "X", "Y", "Z", "*" };

    /**

    * 校验字符系统验证器

    */

    private static class CheckCharacterSystemValidator {

    static boolean validate(String inputString, Designation designation) {

    switch (designation) {

    case ISO_7064_MOD_11_2:

    case ISO_7064_MOD_37_2:

    case ISO_7064_MOD_97_10:

    case ISO_7064_MOD_661_26:

    case ISO_7064_MOD_1271_36:

    return validatePureSystem(inputString, designation);

    case ISO_7064_MOD_11_HYBRID_10:

    case ISO_7064_MOD_27_HYBRID_26:

    case ISO_7064_MOD_37_HYBRID_36:

    return validateHybridSystem(inputString, designation);

    default:

    return false;

    }

    }

    /**

    * 纯系统校验

    */

    static boolean validatePureSystem(String inputString,

    Designation designation) {

    int M = 0; // 模数

    int r = 0; // 基数

    List mapping = null;

    switch (designation) {

    case ISO_7064_MOD_11_2:

    M = 11;

    r = 2;

    mapping = Arrays.asList(NUMBERIC_STRINGS);

    break;

    case ISO_7064_MOD_37_2:

    M = 37;

    r = 2;

    mapping = Arrays.asList(ALPHANUMBERIC_STRINGS);

    break;

    case ISO_7064_MOD_97_10:

    M = 97;

    r = 10;

    mapping = Arrays.asList(NUMBERIC_STRINGS);

    break;

    case ISO_7064_MOD_661_26:

    M = 661;

    r = 26;

    mapping = Arrays.asList(ALPHABETIC_STRINGS);

    break;

    case ISO_7064_MOD_1271_36:

    M = 1271;

    r = 36;

    mapping = Arrays.asList(ALPHANUMBERIC_STRINGS);

    break;

    default:

    return false;

    }

    char[] strArray = inputString.toCharArray();

    int S = 0;

    int n = strArray.length;

    for (int i = 1; i <= n; i++) {

    // 注意这里不要使用Math的pow方法

    S += mapping.indexOf(String.valueOf(strArray[i - 1]))

    * BigInteger.valueOf(r).pow(n - i)

    .mod(BigInteger.valueOf(M)).intValue();

    }

    return S % M == 1;

    }

    /**

    * 混合系统校验

    */

    static boolean validateHybridSystem(String inputString,

    Designation designation) {

    int M = 0; // 模数1

    List mapping = null;

    switch (designation) {

    case ISO_7064_MOD_11_HYBRID_10:

    M = 10;

    mapping = Arrays.asList(NUMBERIC_STRINGS);

    break;

    case ISO_7064_MOD_27_HYBRID_26:

    M = 26;

    mapping = Arrays.asList(ALPHABETIC_STRINGS);

    break;

    case ISO_7064_MOD_37_HYBRID_36:

    M = 36;

    mapping = Arrays.asList(ALPHANUMBERIC_STRINGS);

    break;

    default:

    return false;

    }

    int Mplus1 = M + 1; // 模数2

    char[] strArray = inputString.toCharArray();

    int S = M + mapping.indexOf(String.valueOf(strArray[0]));

    int P = 0;

    for (int i = 1; i < strArray.length; i++) {

    P = ((S % M == 0 ? M : S % M) * 2) % Mplus1;

    S = P + mapping.indexOf(String.valueOf(strArray[i]));

    }

    return S % M == 1;

    }

    }

    /**

    * 校验字符生成器

    */

    private static class CheckCharacterComputor {

    static String compute(String inputString, Designation designation) {

    switch (designation) {

    case ISO_7064_MOD_11_2:

    case ISO_7064_MOD_37_2:

    return polynomialMethod4PureSystemWith1CheckChar(

    inputString, designation);

    case ISO_7064_MOD_97_10:

    case ISO_7064_MOD_661_26:

    case ISO_7064_MOD_1271_36:

    return polynomialMethod4PureSystemWith2CheckChar(

    inputString, designation);

    case ISO_7064_MOD_11_HYBRID_10:

    case ISO_7064_MOD_27_HYBRID_26:

    case ISO_7064_MOD_37_HYBRID_36:

    return recursiveMethod4HybridSystemWith1CheckChar(

    inputString, designation);

    default:

    return null;

    }

    }

    /**

    * 通过多项式法计算纯系统一位校验字符

    */

    static String polynomialMethod4PureSystemWith1CheckChar(String str,

    Designation designation) {

    int M = 0; // 模数

    int r = 0; // 基数

    List mapping = null;

    switch (designation) {

    case ISO_7064_MOD_11_2:

    M = 11;

    r = 2;

    mapping = Arrays.asList(NUMBERIC_STRINGS);

    break;

    case ISO_7064_MOD_37_2:

    M = 37;

    r = 2;

    mapping = Arrays.asList(ALPHANUMBERIC_STRINGS);

    break;

    default:

    break;

    }

    char[] strArray = str.toCharArray();

    int S = 0;

    int n = strArray.length + 1;

    for (int i = n; i >= 2; i--) {

    // 注意这里不要使用Math的pow方法

    S += mapping.indexOf(String.valueOf(strArray[n - i]))

    * BigInteger.valueOf(r).pow(i - 1)

    .mod(BigInteger.valueOf(M)).intValue();

    }

    return mapping.get((M + 1 - S % M) % M);

    }

    /**

    * 通过多项式法计算纯系统二位校验字符

    */

    static String polynomialMethod4PureSystemWith2CheckChar(String str,

    Designation designation) {

    int M = 0; // 模数

    int r = 0; // 基数

    List mapping = null;

    switch (designation) {

    case ISO_7064_MOD_97_10:

    M = 97;

    r = 10;

    mapping = Arrays.asList(NUMBERIC_STRINGS);

    break;

    case ISO_7064_MOD_661_26:

    M = 661;

    r = 26;

    mapping = Arrays.asList(ALPHABETIC_STRINGS);

    break;

    case ISO_7064_MOD_1271_36:

    M = 1271;

    r = 36;

    mapping = Arrays.asList(ALPHANUMBERIC_STRINGS);

    break;

    default:

    break;

    }

    char[] strArray = str.toCharArray();

    int S = 0;

    int n = strArray.length + 2;

    for (int i = n; i >= 3; i--) {

    // 注意这里不要使用Math的pow方法

    S += mapping.indexOf(String.valueOf(strArray[n - i]))

    * BigInteger.valueOf(r).pow(i - 1)

    .mod(BigInteger.valueOf(M)).intValue();

    }

    return mapping.get(((M + 1 - S % M) % M) / r)

    + mapping.get(((M + 1 - S % M) % M) % r);

    }

    /**

    * 通过递归法法计算混合系统一位校验字符

    */

    static String recursiveMethod4HybridSystemWith1CheckChar(

    String inputString, Designation designation) {

    int M = 0; // 模数1

    List mapping = null;

    switch (designation) {

    case ISO_7064_MOD_11_HYBRID_10:

    M = 10;

    mapping = Arrays.asList(NUMBERIC_STRINGS);

    break;

    case ISO_7064_MOD_27_HYBRID_26:

    M = 26;

    mapping = Arrays.asList(ALPHABETIC_STRINGS);

    break;

    case ISO_7064_MOD_37_HYBRID_36:

    M = 36;

    mapping = Arrays.asList(ALPHANUMBERIC_STRINGS);

    break;

    default:

    break;

    }

    int Mplus1 = M + 1; // 模数2

    char[] strArray = inputString.toCharArray();

    int S = 0;

    int P = M;

    int n = strArray.length + 1;

    for (int i = n; i >= 2; i--) {

    S = P + mapping.indexOf(String.valueOf(strArray[n - i]));

    P = ((S % M == 0 ? M : S % M) * 2) % Mplus1;

    }

    return mapping.get((M + 1 - P % M) % M);

    }

    }

    }编辑于 2018-09-10 19:16​赞同 86​​20 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录金融加密算法金融软件领域从业者分享金融加