function IsRRNoValid(n) { // RR numbers need to be 11 chars long if (n.length != 11) return false; var checkDigit = n.substr(n.length - 2, 2); var modFunction = function(nr) { return 97 - (nr % 97); }; var nrToCheck = parseInt(n.substr(0, 9)); // first check without 2 if (modFunction(nrToCheck) == checkDigit) return true; // then check with 2 appended for y2k+ births nrToCheck = parseInt('2' + n.substr(0, 9)); return (modFunction(nrToCheck) == checkDigit); }
Easy as pie. You can get the gender and date of birth out of there as well, but I don't need that info for my purpose. A slightly more advanced validation would also check to see if the first 6 digits represent a valid date according to the yyMMdd format (determining the right century using the current validation).