如果要做到全国通用。估计有点问题。毕竟身份证是与个人的信息相互对应的。除非走专业的通道去校验!!如果只是简单判断身份证是否合法有效,可以参考一下身份证号码的构造结构。
首先看看身份证是怎么构造的:
首先:
1)地区代码:表示出生地,上图为北京市朝阳区
2)出生日期:不解释,只要合理就好
3)顺序号:最后一位为奇数表示性别男,偶数性别女
4)校验位:这是系统验证比较关键的一位,由前面17位通过公式计算得出,具体公式在此不做讨论,因为其结果为数字0~9或者字母X
这些条件都知道了。
就可以开始了:
//首先最迟判断身份证号码的位数(18)var CardNumber=""//待验证的身份证号码
var iscard=/^\d{17}([0-9]|X)$/
if(iscard.text(CardNumber)){
//验证身份证的"地区代码(前6位数字,这里需要搜集各个地区的代码...)"
if(这里校验地区代码){
if(这里校验出生日期){
//校验出生日期时,会牵扯到日历算法(计算某年的某月有多少天,防止用户随意输入大于31的日期)
//如果判断到这里了,就可以初步确定为"合法有效"的身份证号码了。
//因为“校验位”相对而言较复杂。如果楼主有意思。可以百度找资料。
}
}
}
var s="11111111111111x"if (s.length==18){
if (s.substring(17).toUpperCase()=="X"){
if (isNaN(s.substr(0,17))){
alert("不是身份证号码")
}
else{
alert("是身份证号码")
}
}
else{
if (isNaN(s)){
alert("不是身份证号码")
}
else{
alert("是身份证号码")
}
}
}
else if(s.length==15 && !isNaN(s)){
alert("是身份证号码")
}
else{
alert("不是身份证号码")
}
18位身份证:先用这个表达式取出出生年份
\d{6}(\d{4})\d{8}
$1就是四位的年份,比如1986
在用这个表达式判断是不是在1900-2000之间
(19\d{2}|2000)
15位身份证,这种身份证1900和2000是区分不出来的,这种身份证年份只用后两位表示
先用这个表达式取出出生年份
\d{6}(\d{2})\d{7}
$1就是二位的年份,比如86
在用这个表达式判断是不是在1900-2000之间
\d{2}
这是主要的方法,细节就不写啦,呵呵,我还有活,祝你好运