test-numbers-generator
Version:
Generate and validate European test phone numbers (mobile and landline) in safe, non-existent ranges.
44 lines (40 loc) • 1.27 kB
text/typescript
// src/bsnGenerators.ts
/**
* Genereert een geldig Nederlands BSN (Burger Service Nummer) voor testdoeleinden.
* Een BSN is 9 cijfers en voldoet aan de 11-proef.
*/
export function generateTestBSN(): string {
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).
*/
export function isValidBSN(bsn: string): boolean {
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;
}