18位身份证号码的验证方法。
在线测试(验证账号与密码皆为yu2n):http://yu2n.tk/doc/sfz.html | | | function checkID(sID){ | | | | var strPass = false; | | if(/^\d{15}$|^\d{18}$|^\d{17}[xX]$/.test(sID)) | | { | | | | var pattern = /^((\d{2}(([02468][048])|([13579][26]))((((0[13578])|(1[02]))((0[1-9])|([1-2][0-9])|(3[01])))|(((0[469])|(11))((0[1-9])|([1-2][0-9])|(30)))|(02((0[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([13579][01345789]))((((0[13578])|(1[02]))((0[1-9])|([1-2][0-9])|(3[01])))|(((0[469])|(11))((0[1-9])|([1-2][0-9])|(30)))|(02((0[1-9])|(1[0-9])|(2[0-8]))))))?$/; | | if (pattern.test(sID.substring(6, 6 + 8))) | | { | | | | var str = sID.substring(0, 17); | | if (per17To18(str)==sID.toUpperCase()){strPass = true}; | | } | | } | | | | if (strPass == true){ | | | | var strAreaID = sID.substring(0, 6); | | var strDate = sID.substring(6, 14); | | var strAreaFullName = GetAreaName(strAreaID); | | var valSex = sID.substring(14, 17) % 2, strSex; (valSex==0)? strSex = "女" : strSex = "男"; | | var strFullDate = strDate.substring(0, 4) + "年" + strDate.substring(4, 6) + "月" + strDate.substring(6, 8) + "日"; | | } | | } | | | | | | function per17To18(str){ | | var A = new Array(17); | | var W = "7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2".split(","); | | var S = 0; | | | | for (var i = 0; i < A.length; i++) | | { | | A[i] = str.substring(i, i + 1); | | S += A[i] * W[i]; | | } | | | | var Y = S % 11; | | | | var C = "1,0,X,9,8,7,6,5,4,3,2".split(","); | | return str + C[Y]; | | }COPY |
|