Java 在应用程序中验证 Aadhar 卡号

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/27686384/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-11 04:50:55  来源:igfitidea点击:

validating the Aadhar card number in a application

javaspring-mvc

提问by Kiran Sunkari

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

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

What is Aadhaar?

什么是 Aadhaar?

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

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

采纳答案by RE350

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.

我认为您正在寻找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;
        }
    }

For More Info:-

欲了解更多信息:-

http://en.wikibooks.org/wiki/Algorithm_Implementation/Checksums/Verhoeff_Algorithmhttps://groups.google.com/forum/#!topic/aadhaarauth/eB5hOU-Qtq0http://simplybanking.wordpress.com/2013/07/14/the-actual-uidai-aadhaar-number-is-11-digits-long-and-not-12-digits/

http://en.wikibooks.org/wiki/Algorithm_Implementation/Checksums/Verhoeff_Algorithm https://groups.google.com/forum/#!topic/aadhaarauth/eB5hOU-Qtq0 http://simplybanking.wordpress.com/2013/ 07/14/the-actual-uidai-aadhaar-number-is-11-digits-long-and-not-12-digits/

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

回答by Tanuj Verma

Use this javascript

使用这个 javascript

// multiplication table d
var d = [
    [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]
];

// permutation table p
var p = [
    [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]
];

// inverse table inv
var inv = [0, 4, 3, 2, 1, 5, 6, 7, 8, 9];

// converts string or number to an array and inverts it
function invArray(array) {

    if (Object.prototype.toString.call(array) === "[object Number]") {
        array = String(array);
    }

    if (Object.prototype.toString.call(array) === "[object String]") {
        array = array.split("").map(Number);
    }

    return array.reverse();

}

// generates checksum
function generate(array) {

    var c = 0;
    var invertedArray = invArray(array);

    for (var i = 0; i < invertedArray.length; i++) {
        c = d[c][p[((i + 1) % 8)][invertedArray[i]]];
    }

    return inv[c];
}

// validates checksum
function validate(array) {

    var c = 0;
    var invertedArray = invArray(array);

    for (var i = 0; i < invertedArray.length; i++) {
        c = d[c][p[(i % 8)][invertedArray[i]]];
    }

    return (c === 0);
}

 $(document).ready(function () {
  $('#UserForm').formValidation({
                    message: 'This value is not valid',
                    feedbackIcons: {
                        valid: 'glyphicon glyphicon-ok',
                        invalid: 'glyphicon glyphicon-remove',
                        validating: 'glyphicon glyphicon-refresh'
                    },
                    fields: {aadhaar_no: {
                            validators: {
                                digits: {
                                    message: 'Please use numeric characters only.'
                                },
                                stringLength: {
                                    min: 12,
                                    max: 12,
                                    message: 'The aadhaar number must be 12 characters long'
                                }, identical: {
                                    field: 'c_aadhaar_number',
                                    message: 'The aadhaar number and its confirm field are not the same'
                                }, callback: {
                                    message: 'The input string is not a valid Aadhaar number.',
                                    callback: function (value, validator, $field) {
                                        return validate(value);
                                    }
                                }
                            }
                        }
 });
            });
<div class="form-group">
                                        <label for="aadhaar_number" class="col-lg-5 control-label">Aadhaar Number&nbsp;<span style="color: red">*</span></label>
                                        <div class="col-lg-7 ">
                                            <input maxlength="12" type="password" class="form-control" id="aadhaar_number" name="aadhaar_no" placeholder="Aadhaar Number" required="">
                                        </div>
                                    </div> 

CourtesyWikipedia

礼貌维基百科

回答by Kunal Shah

Try this one.

试试这个。

function validateAadhaar1(fieldData){                        

    console.log(fieldData.id);
    var lengthOfAadhaar = fieldData.value;                        

    var checkDigits = /^\d+$/.test(lengthOfAadhaar);

    var zero  =  /.!=000000000000/.test(lengthOfAadhaar); 
    var one   =  /.!=111111111111/.test(lengthOfAadhaar);
    var two   =  /.!=222222222222/.test(lengthOfAadhaar);
    var three =  /.!=333333333333/.test(lengthOfAadhaar);
    var four =   /.!=444444444444/.test(lengthOfAadhaar);
    var five =   /.!=555555555555/.test(lengthOfAadhaar);
    var six =    /.!=666666666666/.test(lengthOfAadhaar);
    var seven =  /.!=777777777777/.test(lengthOfAadhaar);
    var eight =  /.!=888888888888/.test(lengthOfAadhaar);
    var nine =   /.!=999999999999/.test(lengthOfAadhaar);


    if(lengthOfAadhaar.length!=12 || checkDigits == false || zero == false || one ==false || two ==false ||
        three == false || four == false || five == false || six == false || seven == false || eight == false 
        || nine == false)
    {               

        document.getElementById(fieldData.id).style.color = "#ff0202";    

        return false;

    } else{                         

        document.getElementById(fieldData.id).style.color = "#555";      

    }
    return true;
}    

回答by Tamojit Pal

Objective C for iOS

iOS 目标 C

import "AadhaarValidate.h"

导入“AadhaarValidate.h”

@implementation AadhaarValidate

int _multiplicationTable[][10] = {
    { 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 }
};
int _permutationTable[][10] = {
    { 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 }
};
int _inverseTable[] = { 0, 4, 3, 2, 1, 5, 6, 7, 8, 9 };
+(BOOL)isValidateAadhaar:(NSString *)aaDhaarNumber{
    int c = 0;
    int len = (int)[aaDhaarNumber length];

    const char *numberInChar = [aaDhaarNumber UTF8String];

    for (int i = 0; i < len; ++i)
        c = _multiplicationTable[c][_permutationTable[(i % 8)][numberInCharenter code here[len - i - 1] - '0']];
    return c == 0;
}
@end
**Test**
> NSLog(@"Check aadhar number:%d",[AadhaarValidate
> isValidateAadhaar:@"*******"]);   

回答by ABcDexter

python3

蟒蛇3

def aadharNumVerify(adharNum: str) -> bool:
    """
    Takes a N digit aadhar number and
    returns a boolean value whether that is Correct or Not
    """
    verhoeff_table_d = (
        (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))

    verhoeff_table_p = (
        (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))

    # verhoeff_table_inv = (0, 4, 3, 2, 1, 5, 6, 7, 8, 9)

    def checksum(s: str) -> int:
        """For a given number generates a Verhoeff digit and
        returns number + digit"""
        c = 0
        for i, item in enumerate(reversed(s)):
            c = verhoeff_table_d[c][verhoeff_table_p[i % 8][int(item)]]
        return c

    # Validate Verhoeff checksum
    return checksum(adharNum) == 0 and len(adharNum) == 12