Pages

Wednesday, December 14, 2011

Sri lanka NIC number validation using Date of Birth JavaScript, JQuery

JavaScript Part

$(document).ready(function(){
    $('#btn').click(function() {
            var error = '';
        if ($('#dob').val() == "") {
            error = "Please input date of birth \n";
        }
        var id = $('#id').val();
        if ( id == "") {
            error = error+"Please input your Id number"
        }
        if (id.length < 10 || id.length > 10) {
            error = error+"Invalid Id number"
        }
        if(error!=''){
            alert(error);
            return false;
        }
        
          var dob = $('#dob').val();
          var id = $('#id').val().substr(0,5);
          var arr  = dob.split('/');
          var year = arr[2];
          var month = arr[1];
          var day = arr[0];
          var gender = $('input:radio[name=sex]:checked').val();
          var dayCount = getDayCount(month, day);
          var idnumber;
          var yearType = year%4;
          if(gender=='f'){
             if(yearType== '0'){
                 idnumber = year.substr(2,2)+(dayCount+499);
                  }else{
                 idnumber = year.substr(2,2)+(dayCount+500);
                  }
          }else {
              if(dayCount<10)
                  idnumber = year.substr(2,2)+'00'+dayCount;
              else if(dayCount<100)
                  idnumber = year.substr(2,2)+'0'+dayCount;
              else
                  idnumber = year.substr(2,2)+dayCount;        
          }
          if(id==idnumber){
              alert('Id number ok');
              return true;              
          }else{
              alert('Your Id number, Gender or date of birth invalid');
            return false;
          }
    });

    function getDayCount(month, day){
        var dayCount = 0;
        var month = month;
        var day = parseInt(day);
        if(month==1){
            dayCount = day;
        }else if (month==2) {
            dayCount = 31+day;
        }else if (month==3) {
            dayCount = 59+day;
        }else if (month==4) {
            dayCount = 90+day;
        }else if (month==5) {
            dayCount = 120+day;
        }else if (month==6) {
            dayCount = 151+day;
        }else if (month==7) {
            dayCount = 181+day;
        }else if (month==8) {
            dayCount = 212+day;
        }else if (month==9) {
            dayCount = 243+day;
        }else if (month==10) {
            dayCount = 273+day;
        }else if (month==11) {
            dayCount = 304+day;
        }else if (month==12) {
            dayCount = 335+day;
        }
        if( (month > 2)){
            return dayCount+1;
        }
        else {
            return dayCount;
        }
    }
    
});

HTML body.
<body>
<form action="" method='post'>
<label for='dob'>Date of Birth*: </label>
<input class="required" type='text' name='dob' id='dob' value='' maxlength="50" /><br>
<label for='dob'>Id*: </label>
<input class="required" type='text' name='id' id='id' value='' maxlength="50" /><br>
<label for='sex'>Gender*: </label>
Male<input type='radio' name='sex' id='sex' value='m' maxlength="50" checked="checked" />
Female<input type='radio' name='sex' id='sex' value='f' maxlength="50" /><br>
<input type="submit" value="Validate" id="btn" onclick="validateid()">
</form>
</body>

Description

To use the above javascript function, you should have installed JQuery and Jquery UI libraries properly. 
If JQuery has been installed properly, you can see the Date Of Birth field which gives the jquery calender to select the date as follows.
Once you have configured your environment to use JQuery, you can create a simple html form along with the fields that you want to capture data. This form must capture the following in order to validate NIC number.
  • Date Of Birth
  • Gender
In other words, your html form must have at least 3 required fields. Date of birth, gender and the NIC number.
Put the above JQuery function inside your scripts.
<head>
<script>
.........<above function goes here>

</script>
</head>
Now you are ready to go. Try it and feel free to ask for help if you hit any issue with this.