我们正在开发一个应用程序,该应用程序需要检查用户是否输入了有效的“AADHAR”编号。我找到了一些链接和一些“API”,但没有满足最终要求,请提供一些有用的 Material 来解决此问题

What is Aadhaar?

Aadhaar是由印度唯一身份识别机构代表印度政府发行的12位个人识别码。

最佳答案

我认为您正在寻找Verhoeff algorithm,因为UIDAI使用此算法来验证aadhar号码。您只需要创建和使用下面的类。

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;
        }
    }

有关更多信息:-
  • Verhoeff_Algorithm
  • Google groups, Aadhar auth
  • Actual aadhaaar is 11 digits long and not 12


  • 编辑:-
    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;
        }
    

    关于java - 在应用程序中验证Aadhar卡号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27686384/

    10-13 03:42