身份证号码验证函数(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
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
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;
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]; }
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();
}
}
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));