JS验证身份证18位数字有x|X(不要正则表达式方法)

JavaScript07

JS验证身份证18位数字有x|X(不要正则表达式方法),第1张

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("不是身份证号码")

}

如果要做到全国通用。估计有点问题。毕竟身份证是与个人的信息相互对应的。除非走专业的通道去校验!!如果只是简单判断身份证是否合法有效,可以参考一下身份证号码的构造结构。

首先看看身份证是怎么构造的:

首先:

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的日期)

       //如果判断到这里了,就可以初步确定为"合法有效"的身份证号码了。

       //因为“校验位”相对而言较复杂。如果楼主有意思。可以百度找资料。

     }

  }

}