有人可以帮我写一个Javascript / Algorithm函数来检查唯一公民身份号码是否正确?
我想要一个基于这个逻辑的Javascript函数
HTTPS://en.wikipedia.org / …
var checkCivilNumber = function(number) { var coef = [2, 4, 8, 5, 10, 9, 7, 3, 6], sum = 0; for (var i = 0; i < number.length - 1; i++) { sum += parseInt(number[i]) * coef[i]; } return (((sum % 11) % 10) == number[number.length-1]); }
测试:
console.log(checkCivilNumber("7523169263")); console.log(checkCivilNumber("8032056031")); console.log(checkCivilNumber("8001010008")); console.log(checkCivilNumber("7501020018")); console.log(checkCivilNumber("7552010005")); console.log(checkCivilNumber("7542011030"));
这是获取细节的功能。可以使用子字符串提取字段,然后根据规则进行调整。我会让你正确地格式化输出:
var civilNumberDetails = function(number) { var year = parseInt(number.substring(0,2)) + 1900; var month = parseInt(number.substring(2,4)); var day = parseInt(number.substring(4,6)); if(month > 40) // years from 2000-2099 have 40 added to the month { month -= 40; year += 100; } if(month > 20) // years from 1800-1899 have 20 added to the month { month -= 20; year -= 100; } // check odd/even of 9th digit using bitwise operator: var gender = (parseInt(number[8]) & 1) ? "F" : "M"; console.log(year + "-" + month + "-" + day + " " + gender); }