南非身份证号码validation并获得年龄和性别

我已经研究了这个,但我使用的代码似乎都没有用。 南非身份证号码包含出生日期和性别。 我想要的只是当他们的ID号被输入到输入字段时输入该信息并validation它,最好是在jQuery或javascript中

任何帮助表示赞赏,

的Dawid

您可以使用Koenyn的正则表达式validation,而不是确定输入中的一位数字(0-9?)如何表示性别,但基于您提供的此工具和David Russell 使用Javascriptvalidation南非ID号 ,这里是未经测试的尝试:

更新1:关注此主题后, 南非的身份证号码是由什么组成的? ,我更新了我的实施,包括性别和公民身份测试。

更新2:忘记在日期字符串fullDate包装月号增量id_month + 1 ,使用Dawid修复更新解决方案。

HTML标记

 

Enter the ID Number:

Javascript

 function Validate() { // first clear any left over error messages $('#error p').remove(); // store the error div, to save typing var error = $('#error'); var idNumber = $('#idnumber').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('

ID number does not appear to be authentic - input not a valid number

'); 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('

ID number does not appear to be authentic - date part not valid

'); 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('

ID number does not appear to be authentic - check digit is not valid

'); 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('

South African ID Number: ' + idNumber + '

Birth Date: ' + fullDate + '

Gender: ' + gender + '

SA Citizen: ' + citzenship + '

'); } // otherwise, show the error else { error.css('display', 'block'); } return false; } function isNumber(n) { return !isNaN(parseFloat(n)) && isFinite(n); } $('#idCheck').submit(Validate);

演示 : http : //jsfiddle.net/chridam/VSKNx/

这是我们公司的validation正则表达式:

 string IdExpression = @"(?[0-9][0-9])(?([0][1-9])|([1][0-2]))(?([0-2][0-9])|([3][0-1]))(?[0-9])(?[0-9]{3})(?[0-9])(?[0-9])(?[0-9])"; 

至于使用正则表达式,它真的很简单http://www.w3schools.com/jsref/jsref_obj_regexp.asp

你可以使用一个jQuery插件。 请访问http://www.verifyid.co.za/jqueryid查看