luhn algorithm c# valid sa id code example

Example: south african id number validation c#

//Validate ID Number 
//JQuery
<script>


function isNumber(n) {
    return !isNaN(parseFloat(n)) && isFinite(n);
}

    $('#idCheck').click(function () {

 // first clear any left over error messages
    $('#error p').remove();
    // store the error div, to save typing
    var error = $('#error');

    var idNumber = $('#check').val();


    // assume everything is correct and if it later turns out not to be, just set this to false
    var correct = true;

    //Ref: http://www.sadev.co.za/content/what-south-african-id-number-made
    // SA ID Number have to be 13 digits, so check the length
        if (idNumber.length != 13 || !isNumber(idNumber))
        {
        error.append('<p>ID number does not appear to be authentic</p>');
        correct = false;
         }

    // get first 6 digits as a valid date
    var tempDate = new Date(idNumber.substring(0, 2), idNumber.substring(2, 4) - 1, idNumber.substring(4, 6));

    var id_date = tempDate.getDate();
    var id_month = tempDate.getMonth();
    var id_year = tempDate.getFullYear();

    var fullDate = id_date + "-" + id_month + 1 + "-" + id_year;

    if (!((tempDate.getYear() == idNumber.substring(0, 2)) && (id_month == idNumber.substring(2, 4) - 1) && (id_date == idNumber.substring(4, 6)))) {
        //error.append('<p>ID number does not appear to be authentic - date part not valid</p>');
        correct = false;
    }

    // get the gender
    var genderCode = idNumber.substring(6, 10);
    var gender = parseInt(genderCode) < 5000 ? "Female" : "Male";

    // get country ID for citzenship
    var citzenship = parseInt(idNumber.substring(10, 11)) == 0 ? "Yes" : "No";

    // apply Luhn formula for check-digits
    var tempTotal = 0;
    var checkSum = 0;
    var multiplier = 1;
    for (var i = 0; i < 13; ++i) {
        tempTotal = parseInt(idNumber.charAt(i)) * multiplier;
        if (tempTotal > 9) {
            tempTotal = parseInt(tempTotal.toString().charAt(0)) + parseInt(tempTotal.toString().charAt(1));
        }
        checkSum = checkSum + tempTotal;
        multiplier = (multiplier % 2 == 0) ? 1 : 2;
    }
    if ((checkSum % 10) != 0) {
        //error.append('<p>ID number does not appear to be authentic - check digit is not valid</p>');
        correct = false;
    };


    // if no error found, hide the error message
    if (correct) {
        error.css('display', 'none');

        // clear the result div
        $('#result').empty();
        // and put together a result message
        $('#result').append('<p>South African ID Number:   ' + idNumber + '</p><p>Birth Date:   ' + fullDate + '</p><p>Gender:  ' + gender + '</p><p>SA Citizen:  ' + citzenship + '</p>');
    }
    // otherwise, show the error
    else {
        error.css('display', 'block');
    }   
    });
</script>

//HTML
<div class="form-group">
   <label>ID Number:<b style="color:red; ">*</b></label>
   <div class="input-group mb-3">
    <input type="text" name="ID" id="check" class="form-control" required >
    <div class="input-group-append">
     <button class="btn btn-primary" type="button" id="idCheck">Validate</button>
    </div>
   </div>
                   
   <div id="result" style="width:100%; background-color:rgba(58, 114, 59, 0.48); padding:5px; border-radius:5px; color:white; "></div>
   <div id="error" style="width:100%; background-color:rgba(219, 23, 23, 0.48); padding:5px; border-radius:5px; color:white; "></div>
</div>