javaspring-mvc

validating the Aadhar card number in a application


we are developing a application which need to check whether user entering valid "AADHAR" number or not. i find some links and some "apis" but didn't meet final requirement please provide me a some useful material to solve this

What is Aadhaar?

Aadhaar is a 12 digit individual identification number issued by the Unique Identification Authority of India on behalf of the Government of India.


Solution

  • I think you are looking for Verhoeff algorithm, because UIDAI uses this algorithm for validating the aadhar number. You just need to create and use below class.

    class VerhoeffAlgorithm{
            static int[][] d  = new int[][]
                    {
                            {0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
                            {1, 2, 3, 4, 0, 6, 7, 8, 9, 5},
                            {2, 3, 4, 0, 1, 7, 8, 9, 5, 6},
                            {3, 4, 0, 1, 2, 8, 9, 5, 6, 7},
                            {4, 0, 1, 2, 3, 9, 5, 6, 7, 8},
                            {5, 9, 8, 7, 6, 0, 4, 3, 2, 1},
                            {6, 5, 9, 8, 7, 1, 0, 4, 3, 2},
                            {7, 6, 5, 9, 8, 2, 1, 0, 4, 3},
                            {8, 7, 6, 5, 9, 3, 2, 1, 0, 4},
                            {9, 8, 7, 6, 5, 4, 3, 2, 1, 0}
                    };
            static int[][] p = new int[][]
                    {
                            {0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
                            {1, 5, 7, 6, 2, 8, 3, 0, 9, 4},
                            {5, 8, 0, 3, 7, 9, 6, 1, 4, 2},
                            {8, 9, 1, 6, 0, 4, 3, 5, 2, 7},
                            {9, 4, 5, 3, 1, 2, 6, 8, 7, 0},
                            {4, 2, 8, 6, 5, 7, 3, 9, 0, 1},
                            {2, 7, 9, 3, 8, 0, 6, 4, 1, 5},
                            {7, 0, 4, 6, 9, 1, 3, 2, 5, 8}
                    };
            static int[] inv = {0, 4, 3, 2, 1, 5, 6, 7, 8, 9};
    
            public static boolean validateVerhoeff(String num){
                int c = 0;
                int[] myArray = StringToReversedIntArray(num);
                for (int i = 0; i < myArray.length; i++){
                    c = d[c][p[(i % 8)][myArray[i]]];
                }
    
                return (c == 0);
            }
            private static int[] StringToReversedIntArray(String num){
                int[] myArray = new int[num.length()];
                for(int i = 0; i < num.length(); i++){
                    myArray[i] = Integer.parseInt(num.substring(i, i + 1));
                }
                myArray = Reverse(myArray);
                return myArray;
            }
            private static int[] Reverse(int[] myArray){
                int[] reversed = new int[myArray.length];
                for(int i = 0; i < myArray.length ; i++){
                    reversed[i] = myArray[myArray.length - (i + 1)];
                }
                return reversed;
            }
        }
    

    For More Info:-

    1. Verhoeff_Algorithm
    2. Google groups, Aadhar auth
    3. Actual aadhaaar is 11 digits long and not 12

    EDIT:--

    public static boolean validateAadharNumber(String aadharNumber){
            Pattern aadharPattern = Pattern.compile("\\d{12}");
            boolean isValidAadhar = aadharPattern.matcher(aadharNumber).matches();
            if(isValidAadhar){
                isValidAadhar = VerhoeffAlgorithm.validateVerhoeff(aadharNumber);
            }
            return isValidAadhar;
        }