18ビットIDの検証
11077 ワード
今日はこのような判断が必要なので、自分で書いてみました.
JAvascriptバージョン:
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;
}