NPI Generator and validator
This is based on the C# code at https://www.claredi.com/download/npi_checkdigit.cs
I converted that code to TypeScript, then copied the resultant javascript to jsfiddle. Added a little knockout to display the results, and BAM!
HTML
<input type="text" data-bind="value: input"/>
<button data-bind="click:validate">Validate</button>
<p data-bind="text: inputIsValid, visible: input"></p>
<br/>
<button data-bind="click:generate">Generate</button>
<p data-bind="text: output"></p>
JavaScript
var NpiChecker;
(function (NpiChecker) {
var Npi = (function () {
function Npi() {
}
Npi.isValidNpi = function (npi) {
var tmp;
var sum;
var i;
var j;
i = npi.length;
if ((i == 15) && (npi.indexOf("80840", 0, 5) == 0))
sum = 0;
else if (i == 10)
sum = 24;
else
return false;
j = 0;
while (i != 0) {
tmp = npi.charCodeAt(i - 1) - '0'.charCodeAt(0);
if ((j++ % 2) != 0) {
if ((tmp <<= 1) > 9) {
tmp -= 10;
tmp++;
}
}
sum += tmp;
i--;
}
if ((sum % 10) == 0)
return true;
else
return false;
};
Npi.checkDigitNpi = function (npi9) {
var tmp;
var sum;
var i;
var j;
i = npi9.length;
if ((i == 14) && (npi9.indexOf("80840", 0, 5) == 0))
sum = 0;
else if (i == 9)
sum = 24;
else {
return "!";
}
j = 1;
while (i != 0) {
tmp = npi9.charCodeAt(i - 1) - '0'.charCodeAt(0);
if ((j++ % 2) != 0) {
if ((tmp <<= 1) > 9) {
tmp -= 10;
tmp++;
}
}
sum += tmp;
i--;
}
return String.fromCharCode(((10 - (sum % 10)) % 10 + 48));
};
Npi.generate = function () {
var randomNumber = Math.floor(Math.random()*(999999999-100000000+1)+100000000);
var asdf = NpiChecker.Npi.checkDigitNpi(randomNumber.toString());
return...