18ビットIDの検証

11077 ワード

今日はこのような判断が必要なので、自分で書いてみました.
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;

}