/(\d{15}|\d{18}|\d{17}x)/g若要非0打头/[1-9](\d{14}|\d{16}x|\d{17})/g

解决方案 »

  1.   

    转一个:
    PHP代码:--------------------------------------------------------------------------------
    function checkidcard($idcard)
    {
          if(!eregi("^([1-9]{1})+([0-9]{5})+([1]{1})+([9]{1})+([0-9]{2})+([0]{1})+([1-9]{1})+([012]{1})+([1-9]{1})+([0-9]{3})+([0-9xy]{1})$",$idcard)
    //1999年09月29日 18位
      &&!eregi("^([1-9]{1})+([0-9]{5})+([1]{1})+([9]{1})+([0-9]{2})+([0]{1})+([1-9]{1})+([3]{1})+([01]{1})+([0-9]{3})+([0-9xy]{1})$",$idcard)    
    //1999年09月31日 18位
      &&!eregi("^([1-9]{1})+([0-9]{5})+([1]{1})+([9]{1})+([0-9]{2})+([1]{1})+([012]{1})+([012]{1})+([1-9]{1})+([0-9]{3})+([0-9xy]{1})$",$idcard)
    //1999年12月29日 18位
      &&!eregi("^([1-9]{1})+([0-9]{5})+([1]{1})+([9]{1})+([0-9]{2})+([1]{1})+([012]{1})+([3]{1})+([01]{1})+([0-9]{3})+([0-9xy]{1})$",$idcard)    
    //1999年12月31日 18位
      &&!eregi("^([1-9]{1})+([0-9]{5})+([2]{1})+([0]{1})+([0-9]{2})+([0]{1})+([1-9]{1})+([012]{1})+([1-9]{1})+([0-9]{3})+([0-9xy]{1})$",$idcard)
    //2099年09月29日 18位
      &&!eregi("^([1-9]{1})+([0-9]{5})+([2]{1})+([0]{1})+([0-9]{2})+([0]{1})+([1-9]{1})+([3]{1})+([01]{1})+([0-9]{3})+([0-9xy]{1})$",$idcard)    
    //2099年09月31日 18位
      &&!eregi("^([1-9]{1})+([0-9]{5})+([2]{1})+([0]{1})+([0-9]{2})+([1]{1})+([012]{1})+([012]{1})+([1-9]{1})+([0-9]{3})+([0-9xy]{1})$",$idcard)
    //2099年12月29日 18位
      &&!eregi("^([1-9]{1})+([0-9]{5})+([2]{1})+([0]{1})+([0-9]{2})+([1]{1})+([012]{1})+([3]{1})+([01]{1})+([0-9]{3})+([0-9xy]{1})$",$idcard)    
    //2099年12月31日 18位
      &&!eregi("^([1-9]{1})+([0-9]{5})+([0-9]{2})+([0]{1})+([1-9]{1})+([012]{1})+([1-9]{1})+([0-9]{3})$",$idcard)
    //99年09月29日 15位
      &&!eregi("^([1-9]{1})+([0-9]{5})+([0-9]{2})+([0]{1})+([1-9]{1})+([3]{1})+([01]{1})+([0-9]{3})$",$idcard)
    //99年09月31日 15位
      &&!eregi("^([1-9]{1})+([0-9]{5})+([0-9]{2})+([1]{1})+([012]{1})+([012]{1})+([1-9]{1})+([0-9]{3})$",$idcard)
    //99年12月29日 15位
      &&!eregi("^([1-9]{1})+([0-9]{5})+([0-9]{2})+([1]{1})+([012]{1})+([3]{1})+([01]{1})+([0-9]{3})$",$idcard))
    //99年12月31日 15位
      {
              echo '身份证格式不正确,请正确填写';
              exit();
         }
    }
      

  2.   

    身份证号码验证函数(VBS)
    Function NetRubeCheckIDCard(sStr, ByVal dDate, ByVal nSex)
    NetRubeCheckIDCard = "False"
    If IsNull(sStr) Or sStr = "" Then Exit Function
    If Not IsDate(dDate) Or dDate = "" Then Exit Function
    If Not IsNumeric(nSex) Or nSex = "" Then Exit Function

    Dim oRE, sDate

    Set oRE = New RegExp
    oRE.IgnoreCase = True
    oRE.Global = True

    nSex = CInt(nSex Mod 2)
    sDate = Year(dDate) & DblNum(Month(dDate)) & DblNum(Day(dDate))

    Select Case Len(sStr)
    Case 8
    If DateDiff("yyyy", dDate, Date()) > 19 Then Exit Function
    oRE.Pattern = "^[\d]{8}$"
    If Not oRE.Test(sStr) Then Exit Function
    If sStr <> sDate Then Exit Function
    Case 15
    oRE.Pattern = "^[\d]{15}$"
    If Not oRE.Test(sStr) Then Exit Function
    If Mid(sStr, 7, 6) <> Right(sDate, 6) Then Exit Function
    If CInt(Mid(sStr, 14, 1)) Mod 2 <> nSex Then Exit Function
    Case 18
    oRE.Pattern = "^(?:[\d]{18}|[\d]{17}X)$"
    If Not oRE.Test(sStr) Then Exit Function
    If Mid(sStr, 7, 8) <> sDate Then Exit Function
    If CInt(Mid(sStr, 17, 1)) Mod 2 <> nSex Then Exit Function

    Dim nN, aW, aC, nL

    nN = 0
    aW = Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
    aC = Array("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2")

    For nL = 1 To 17
    nN = nN + CInt(Mid(sStr, nL, 1)) * aW(nL - 1)
    Next

    If UCase(Right(sStr, 1)) <> aC(nN Mod 11) Then Exit Function
    Case Else
    Exit Function
    End Select

    Set oRE = Nothing

    NetRubeCheckIDCard = "True"
    End FunctionFunction DblNum(nNum)
    DblNum = nNum
    If DblNum <10 Then DblNum = "0" & DblNum
    End Function
    身份证号码验证函数(JS)function NetRubeCheckIDCard(s, d, g)
    {
    if (!s) return false;
    d = new Date(d);
    if (!d.getTime()) return false;

    var t, r;

    t = "" + d.getFullYear() + dblNum(d.getMonth() + 1) + dblNum(d.getDate());

    if (g == null || isNaN(g)) return false;
    g = parseInt(g) % 2;

    switch (s.length)
    {
    case 8 :
    if (new Date() > d.setFullYear(d.getFullYear() + 19)) return false;
    r = /^[\d]{8}$/;
    if (!r.test(s)) return false;
    if (s != t) return false; break;
    case 15 :
    r = /^[\d]{15}$/;
    if (!r.test(s)) return false;
    if (s.substr(6, 6) != t.substr(2)) return false;
    if (parseInt(s.charAt(14)) % 2 != g) return false; break;
    case 18 :
    r = /^(?:[\d]{18}|[\d]{17}X)$/i;
    if (!r.test(s)) return false;
    if (s.substr(6, 8) != t) return false;
    if (parseInt(s.charAt(16)) % 2 != g) return false;

    var n = 0;
    var w = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); // 加权因子
    var c = new Array("1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"); // 校验码

    for (var i = 0; i < 17; i++)
    {
    n += parseInt(s.charAt(i)) * w[i];
    }

    if (s.charAt(17).toUpperCase() != c[n % 11]) return false; break;
    default :
    return false;
    }

    return true;
    }function dblNum(n)
    {
    return parseInt(n) < 10 ? "0" + n : n;
    }//var sss = "422324860305482";
    //Response.Write(NetRubeCheckIDCard(sss, "03/05/1986", 0));