test-numbers-generator
Version:
Generate and validate European test phone numbers (mobile and landline) in safe, non-existent ranges.
49 lines (48 loc) • 1.53 kB
JavaScript
;
// src/bsnGenerators.ts
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateTestBSN = generateTestBSN;
exports.isValidBSN = isValidBSN;
/**
* Genereert een geldig Nederlands BSN (Burger Service Nummer) voor testdoeleinden.
* Een BSN is 9 cijfers en voldoet aan de 11-proef.
*/
function generateTestBSN() {
while (true) {
// Genereer 8 random cijfers, eerste cijfer mag niet 0 zijn
const firstDigit = Math.floor(Math.random() * 9) + 1;
const digits = [firstDigit];
for (let i = 1; i < 8; i++) {
digits.push(Math.floor(Math.random() * 10));
}
// Bereken het controlecijfer volgens de 11-proef
let sum = 0;
for (let i = 0; i < 8; i++) {
sum += digits[i] * (9 - i);
}
// Controlecijfer kan negatief zijn
let control = sum % 11;
let lastDigit = 11 - control;
if (lastDigit === 10)
continue; // 10 is ongeldig
if (lastDigit === 11)
lastDigit = 0;
const bsn = [...digits, lastDigit].join("");
// Controleer of het voldoet aan de 11-proef
if (isValidBSN(bsn))
return bsn;
}
}
/**
* Valideert of een string een geldig BSN is (11-proef).
*/
function isValidBSN(bsn) {
if (!/^[0-9]{9}$/.test(bsn))
return false;
let sum = 0;
for (let i = 0; i < 8; i++) {
sum += parseInt(bsn[i], 10) * (9 - i);
}
sum -= parseInt(bsn[8], 10);
return sum % 11 === 0;
}