Last active
August 8, 2022 11:20
-
-
Save wvanderdeijl/176960eba2b75d644351eada2d5aa75b to your computer and use it in GitHub Desktop.
Werkgeversnummer valideren met typescript
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Damm algorithm is a check digit algorithm that detects all single-digit errors and all adjacent transposition errors | |
* https://en.wikipedia.org/wiki/Damm_algorithm | |
* | |
* Live typescript playground at: https://www.typescriptlang.org/play?ssl=33&ssc=1&pln=1&pc=1#code/PQKhCgAIUgRBDAtoy8A2BzA9gJwJYAuAFingM6qQDGRAplQNaQAmeGhqmuhJkx8BFrQL0CFdGkhk8AOwxpaAWlbtBtHDlziZzTpPjMAVvCq0ZggjngyyAByzSCeLDMjrNOMlBhECBW2QAXMDAZgB0AO54DHi2tKzwYbgYwFExwAjIAPro2PjEiN7A4FQuZIJYcVZOLgAq8ABGCpAAvJAA2lCQ3e0ADAA0kADMgwCMgwDsgwCsgwCcgwAcgwBsgwAsgwBMALr9XT1TkAOQC5BbYzMbS6uDQ3sHHZvngydrkMuQR+PDV6cP3R6PyOs2O8xuv0gzwukBWAMB7XePxhIzBUL+ZyOi3hPVR7yO0Ne4MgoM+oxxHVJt1Ok22RMgP1R6wp7U+Z2eoLxdLRwJZ7LuEKRtJeaOmLJhVIZ10h+OJvQeOwA3OBwKAINBIAA1dB4ZgCWiUdgANzMkBkAFdEA11JBzdI5JBCAByCiwACCAFkPdQ6IwWGxCGFvJAAAI4YTmnA2Pg4c0GvAAMzNlutOEdFCNOuYgwT6DIBqwxHUUXzQegxQT5pkVBqrhN+ATAE9MogAMK+hiwAMEAAUsls5oIgSkllkGAAlJAAN6PcMESOuHuPQGQYAAPQAOswp0MAL4bsJbnf7w-b0a7gAkwDCInKfZkA4Ik4AZM-l4D+4P3yvumFw7Y0BMWge2AA9gAwQYnSdcdvx-MI7DQQgeygmCfzQyA-3ic1TB7HtNAiQYVEIScWgAPkgSp1AEZwZHqJpaHafCdnaABqIiCD2Y4SJaNpekecdlV3FVShsLAFDCNAsAwHt60TZskDbDsu1UZDRi2IYwnWaYVjCFZoIE8AgA | |
*/ | |
const operationTable = [ | |
[0, 3, 1, 7, 5, 9, 8, 6, 4, 2], | |
[7, 0, 9, 2, 1, 5, 4, 8, 6, 3], | |
[4, 2, 0, 6, 8, 7, 1, 3, 5, 9], | |
[1, 7, 5, 0, 9, 8, 3, 4, 2, 6], | |
[6, 1, 2, 3, 0, 4, 5, 9, 7, 8], | |
[3, 6, 7, 4, 2, 0, 9, 5, 8, 1], | |
[5, 8, 6, 9, 7, 2, 0, 1, 3, 4], | |
[8, 9, 4, 5, 3, 6, 2, 0, 1, 7], | |
[9, 4, 3, 8, 6, 1, 7, 2, 0, 5], | |
[2, 5, 8, 1, 4, 3, 6, 7, 9, 0], | |
]; | |
/** | |
* Validate a given number using it's DAMM check digit. | |
* @returns true if number is valid, false otherwise. | |
*/ | |
function verifyDammCheckDigit(input: string) { | |
return ( | |
/^[1-9]\d{2}\.\d{3}\.\d{1}$/.test(input) && // adjust regex for different type of numbers | |
input | |
.replace(/\./g, '') // strip all . characters from input | |
.split('') // split input string in individual characters/digits | |
.reduce((row, digit) => operationTable[row][+digit], 0) === 0 // use each digit as column index and use outcome as next row index | |
); | |
} | |
console.log(verifyDammCheckDigit('123.456.6')); |
Het regex patroon op regel 26 moet zijn
/^[1-9]\d{2}\.\d{3}\.\d$/
(nummer mag niet met 0 beginnen)
Thanks. Opgelost.
Deze controle is trouwens voor het formaat 999.999.9
, maar de regex kan aangepast worden voor kortere/langere nummers, zoals bijvoorbeeld /^[1-9]\d{2}\.\d{3}\.\d{3}$/
voor 999.999.999
. De controle gaat er wel vanuit dat het laatste cijfer het controlegetal is.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Het regex patroon op regel 26 moet zijn
/^[1-9]\d{2}\.\d{3}\.\d$/
(nummer mag niet met 0 beginnen)