面试时经常会被问道如何判断是否为身份证号码????
首先要明白身份证号码的编码规则,然后根据编码规则去写正则表达式
身份证编码规则如下(身份证有15为何和18位,以18位身份证为例):
第1位和第2位:省,自治区,直辖市代码(有关取值可查看代码表);
第3位和第4位:地级市,盟,自治州代码(有关取值可查看代码表);
第5位和第6位:县,县级市,区代码(有关取值可查看代码表);
第7位到第10位:出生年(15位身份证出生年显示两位,
例如1992年出生,18位身份证显示1992,而15位则显示92);
第11位和第12位:出生月;
第13位和第14位:出生日;
第15位到第17位:顺序码,第17位若是男生则为单数,若是女生则为双数;
第18位:表示校验码,可以是0-9或者X;(15位身份证无校验码)
<SCRIPT
function
{
}
isIdCardNo("330103780133103");
isIdCardNo("330103780123103");
isIdCardNo("330103197801231030");
</SCRIPT>
<script>
var
aCity={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:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"}
function
var
var
if(!/^\d{17}(\d|x)$/i.test(sId))return
sId=sId.replace(/x$/i,"a");
if(aCity[parseInt(sId.substr(0,2))]==null)return
sBirthday=sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-"+Number(sId.substr(12,2));
var
if(sBirthday!=(d.getFullYear()+"-"+
for(var
if(iSum%11!=1)return
return
}
</script>