Calculator: NRIC Generator
FIN and NRIC generator
by Joey Albert Abano
HTML
<div>
<select id='prefix'>
<option>S</option>
<option>T</option>
<option>F</option>
<option>G</option>
</select>
<input id='age' value="30" size="2">
<button id='generate'>Generate</button>
</div>
<pre id="display">
</pre>
CSS
body {
background:#222;
color:#fff;
}
body, input {
font-size:14px;
}
input {
width:100px;
}
h1 {
font-size:18px;
}
h2 {
font-size:16px;
}
JavaScript
var prefix_el = document.getElementById('prefix');
var age_el = document.getElementById('age');
var generate_el = document.getElementById('generate');
var display_el = document.getElementById('display');
function pad(num, size) {
var s = "0000000" + num;
return s.substr(s.length - size);
}
// first = S,T,F,G age=10-100
function generate(first, age) {
age = parseInt(age, 10);
if (first != 'S' && first != 'T' && first != 'F' && first != 'G') return;
if (!(age >= -1 && age <= 9)) age = -1;
// The IC Generator Algorithm
var chars = pad(Math.floor(Math.random() * 9999999), 7).split('');
if (age != -1) chars[0] = age;
var output = first + chars.join('');
chars[0] *= 2;
chars[1] *= 7;
chars[2] *= 6;
chars[3] *= 5;
chars[4] *= 4;
chars[5] *= 3;
chars[6] *= 2;
var sum = 0;
var offset = (first == "T" || first == "G") ? 4 : 0;
var st = ["J", "Z", "I", "H", "G", "F", "E", "D", "C", "B", "A"];
var fg = ["X", "W", "U", "T", "R", "Q", "P", "N", "M", "L", "K"];
for (i = 0; i <= 6; i++) {
sum += chars[i];
}
temp = (offset + sum) % 11;
var theAlpha = "";
if (first == "S" || first == "T") {
theAlpha = st[temp];
} else if (first == "F" || first == "G") {
theAlpha = fg[temp];
} else theAlpha = "?";
return output + theAlpha;
}
generate_el.addEventListener('click', function() {
display_el.innerHTML = generate(prefix_el.options[prefix_el.selectedIndex].value, parseInt(age_el.value));
});