今天需要这样的一个判断,于是自己试着写了一下:(其实主要就是判断最后一位)
package demo.test2; import java.util.HashMap; import java.util.Map; /** * * @author yinbenyang *18位身份证的验证 */ public class java_7 { public static void main(String[] args) { String myCard = "111111190001019999"; boolean flag = checkIdCard(myCard); System.out.println("flag:"+flag); } public final static Map<Integer, Character> map = new HashMap<Integer, Character>(); static{ map.put(0, '1'); map.put(1, '0'); map.put(2, 'X'); map.put(3, '9'); map.put(4, '8'); map.put(5, '7'); map.put(6, '6'); map.put(7, '5'); map.put(8, '4'); map.put(9, '3'); map.put(10, '2'); } public static boolean checkIdCard(String IdCard) { if(IdCard==null||IdCard.length()!=18){ return false; } int wi[] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; int sum = 0; for(int i = 0 ; i<wi.length ; i++){ sum+= wi[i]*(Integer.parseInt(""+IdCard.charAt(i))); } return map.get(sum%11)==IdCard.charAt(17); } }
javascript版本:
function isIdCardNo(num) { try{ var factorArr = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1); var error; var varArray = new Array(); var intValue; var lngProduct = 0; var intCheckDigit; var intStrLen = num.length; var idNumber = num; // initialize if ((intStrLen != 15) && (intStrLen != 18)) { //error = "输入身份证号码长度不对!"; //alert(error); //frmAddUser.txtIDCard.focus(); return false; } // check and set value for(i=0;i<intStrLen;i++) { varArray[i] = idNumber.charAt(i); if ((varArray[i] < '0' || varArray[i] > '9') && (i != 17)) { //error = "错误的身份证号码!."; //alert(error); //frmAddUser.txtIDCard.focus(); return false; } else if (i < 17) { varArray[i] = varArray[i]*factorArr[i]; } } if (intStrLen == 18) { //check date var date8 = idNumber.substring(6,14); if (checkDate(date8) == false) { //error = "身份证中日期信息不正确!."; //alert(error); return false; } // calculate the sum of the products for(i=0;i<17;i++) { lngProduct = lngProduct + varArray[i]; } // calculate the check digit intCheckDigit = 12 - lngProduct % 11; switch (intCheckDigit) { case 10: intCheckDigit = 'X'; break; case 11: intCheckDigit = 0; break; case 12: intCheckDigit = 1; break; } // check last digit if (varArray[17].toUpperCase() != intCheckDigit) { //error = "身份证效验位错误!...正确为: " + intCheckDigit + "."; //alert(error); return false; } } else{ //length is 15 //check date var date6 = idNumber.substring(6,12); if (checkDate(date6) == false) { //alert("身份证日期信息有误!."); return false; } } }catch(e){ //alert(e) } //alert ("Correct."); return true; }