匹配身份证
先说说网上流传的版本:
\d{15}|\d{18}
d{15}
\d{18} 可以判断,但是有些粗糙
从身份证可以解析出地址、生日、性别等,因此特别说明一下:
身份证规则
中国的身份证为15位(一代)或18位(二代),区别在于二代证只是在一代证的第七位数字前加了19和在末尾加了一位验证码
将15位升级为18位,并解析18位号码构成(地址、生日、性别)
代码如下:
parseID(ID) {
if ( ID.length == 15 ) {
升级为18位
ID = ID.substr( 0,6 ) + "19" + ID.substr( 6 );
前17位对应的系数
var rank = [
"7","9","10","5","8","4","2","1","6","3","7","2"
];
前17为加权除以17后的余数对应的最后一位身份证号码
var last = [
"1","0","X",1)"> 加权和
for ( var i = 0,sum = 0,len = ID.length; i < len; i++)
sum += ID[ i ] * rank[ i ];
加上最后一位
ID += last[ sum % 11 ];
}
if ( ID.length != 18 ) null;
var match = rid.exec( ID );
return match ? {
ID : ID,area : match[ 1 ],y : match[ 24
} : ;
}
限制:
这里只是解析出了地址代码,如何将代码转换为实际地址请问度娘。
返回对象中的sex为1(男)或0(女),并未做转换,如果页面显示需要,可以这样转换:sex ? "男" : "女"
测试:
console.info( parseID( "142327840821047" ) );
console.info( parseID("142327198408210470" ) );
参考资料:
http:baike.baidu.com/view/118340.htm#1