大陆的(有15位的也有18位的):
1、号码的结构
公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
2、地址码
表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。
3、出生日期码
表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。
4、顺序码
表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
5、校验码
(1)十七位数字本体码加权求和公式
S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和
Ai:表示第i位置上的身份证号码数字值
Wi:表示第i位置上的加权因子
Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
(2)计算模
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
代码:
converCharToint方法:
getPowerSum方法:
getCheckCode18方法:
isNum方法:
验证18位身份证号码的有效性:
验证15位有效性:
cityCodes相关代码:
大陆的验证方式基本上可以满足需求了。
台湾:
台湾身份证总共有10位数字。第一位是字母。后面九位是数字。
台湾省份证的第一位的字母代表地区分别以A——Z表示
规则如下:
地区后面的数字为该字母转换的数字码。
A 台北市10
B 台中市11
C 基隆市12
D 台南市13
E 高雄市14
F 台北县15
G 宜兰县16
H 桃园县17
I 嘉义市34
J 新竹县18
K 苗栗县19
L 台中县20
M 南投县21
N 彰化县22
O 新竹市35
P 云林县23
Q 嘉义县24
R 台南县25
S 高雄县26
T 屏东县27
U 花莲县28
V 台东县29
W 金门县30
X 澎湖县31
Y 阳明山32
Z 连江县33
第二位数字代表性别 男性是1,女性是2
例如台北市的男性身份证号码就应该是A1开头
第三位到第九位为任意的一串数字
第十位为验证码。
第十位数字——验证码的计算规则为:
字母(ABCDEFGHJKLMNPQRSTUVXYWZIO)对应一组数(10——35)。
令其十位数为X1,个位数为X2;
D2到D9分别代表身份证号码的第二至第九位数。
Y=X1+9×X2+8×D2+7×D3+6×D4+5×D5+4×D6+3×D7+2×D8+1×D9
将Y的值除以10。得出的余数结果。
再用10来减去这个余数结果。就得出身份证上的最后一位数字。
例如R123456783,R=25,
检查公式是:2+5*9+1*8+2*7+3*6+4*5+5*4+6*3+7*2+8*1=167,
其167再除以10求余数结果。
其余数结果的个位数为7以10减去得3(检查码)。
这里有一个台湾花莲县男性的身份证号码U154482387
用我上面给出的公式去验证一下,看最后一位的身份证号码是不是7。
————————————————————————
综上所述:
在台湾网站上填写身份证,对方能知道正确与否是从你注册信息中通过了上述三个途径知道是不是正确的身份号码。
1.地区(第一位的26字母代表了台湾不同的市县)
2.性别(第二位,男性就是1;女性就是2)
3.最后一位的验证码(是不是满足上面的验证规则)
代码:
twFirstCode相关代码:
香港:
由前7位确定,首位字母改为数字代表,即A以1代表,B以2代表...Z以26代表,可以得到8个数字,之后第一个数字乘以8,第二个数字乘以7,依此类推,第七个数字乘以2
再将以上所有乘积相加,得到一个数,再将这个数除以11,得到余数。如果整除,校验码为0,如果余数为1,则校验码为A,如果余数为2~10,则用11减去这个余数,则为校验码。
例子:计算P103265的校验码(该号码纯属虚构,如与您的身份证号相同,实属巧合)
P,在字母表中排行16,则以16代表
计算:16×8+1×7+0×6+3×5+2×4+6×3+5×2=186
186÷11=16......10
11-10=1
所以算出来的身份证号码是P103265(1)
掌握了这个方法之后可以随意去验证一个香港身份证号码了,按照这个规律,括弧内验证码为A的,比例只有11分之1,所以平时见得少也很正常的
另外:内地的二代身份证号码(18位)的最后一位也是属于验证码,其编码规则与香港的相仿,也是由前面的17位通过公式计算出来的,不过计算更加复杂,到最后也是通过除以11的余数确定的,所以会出现一些身份证号码最后一位为字母X,原因也是一样的
代码:
澳门的算法和香港是一样的,只是各个位数形式不一样,1字开首的身份证号码代表是因龙的行动或1992年后领取身份证之人士,现在新发出的身份证亦以1字开首;5字开首的身份证号码代表持有或曾经持有葡萄牙国民身份证或葡萄牙给外国人身份证之人士;7字开首代表曾经取得蓝卡之人士,大多都是在1970年代至1980年代期间从中国大陆持合法证件到澳门的人士。具体见下面的validateCard10方法。
这样我们可以写一个方法来验证这几种身份证号码形式的有效性:
在这一个方法里validateIdCard10这个方法是验证除大陆外的身份证信息的,代码如下:
这个方法会复杂一点,熟悉了身份证的格式就会明白这个方法里的代码。主要的还是正则表达式的匹配写法。比如这里的^[1|5|7][0-9]{6}\\(?[0-9A-Z]\\)?$它的意思是以1或5或7开头然后后面接着6个数字接着后面就是(字母或数字)。
分享到:
相关推荐
手机号各网段号码校验,包括大陆和香港手机号区分。 大陆手机号码11位数,匹配格式:前三位固定格式+后8位任意数 * 此方法中前三位格式有: * 13+任意数 * 15+除4的任意数 * 18+除1和4的任意数 * 17+除9的...
验证中国大陆居民身份证、港澳居民居住证以及台湾地区居民居住证
车牌号码自定义输入框,并且验证包含新能源
《低功耗验证方法学》分析归纳了多电压低功耗设计仿真验证技术中几乎所有的关键问题,并提出了十分重要的设计验证原则和规范。内容包括:多电压电源管理基础、电源管理隐患、状态保持、多电压测试平台的架构、多电压...
phpweb成品网站跳过官方用户身份验证方法
用户注册验证常用的js代码用户注册验证常用的js代码用户注册验证常用的js代码用户注册验证常用的js代码用户注册验证常用的js代码用户注册验证常用的js代码
js验证数字方法js验证数字方法js验证数字方法js验证数字方法js验证数字方法
文章主要介绍《VMM for SystemVerilog》一书描述的如何利用SystemVerilog语言,采用验证方法学以及验证库开发出先进验证环境.
系统芯片(SOC)验证方法与技术,内含pdg文件,可以用超星阅读器打开。
JavaScript验证用户登录 JavaScript验证用户登录 JavaScript验证用户登录
c#基于HttpModule的用户身份验证 c#基于HttpModule的用户身份验证 c#基于HttpModule的用户身份验证 c#基于HttpModule的用户身份验证c#
IC芯片验证测试平台的搭建,UVM测试平台环境搭建以及验证方法学
javascript常用电话、邮编等验证方法
jsp连接Oracle进行用户登录验证的方法
SystemVerilog 验证方法学
10.1 crv方法概述 10.2 对类加入随机 10.3 用继承来实现层次约束 10.4 动态修改约束 10.5 过度约束 10.6 设定成员 10.7 动态数组 10.8 每个设计/每个测试配置 10.9 约束设计 10.10 类工厂 10.11 状态决定约束实例 ...
java以及JavaScript的香港身份证验证方法。
synopsys数字验证计划用户手册
silverlight 用户验证 当用户填报错误时,服务端信息会反馈到客户端显示
微电子经典中译本系统芯片(SOC)验证方法与技术