Functional Weave
Code in TypeScript

validation.nhs-number@2.0.0

vectors.json

3,046 bytes · view raw

[
  { "name": "the NHS's own example number, as digits", "args": ["9434765919"], "expect": { "valid": true, "normalised": "9434765919", "formatted": "943 476 5919", "reason": null } },
  { "name": "the same number in the 3-3-4 display form", "args": ["943 476 5919"], "expect": { "valid": true, "normalised": "9434765919", "formatted": "943 476 5919", "reason": null } },
  { "name": "hyphenated, with stray spaces around it", "args": ["  943-476-5919 "], "expect": { "valid": true, "normalised": "9434765919", "formatted": "943 476 5919", "reason": null } },
  { "name": "an England and Wales range number whose check digit is simply 4", "args": ["4000000004"], "expect": { "valid": true, "normalised": "4000000004", "formatted": "400 000 0004", "reason": null } },
  { "name": "remainder 0 gives 11, which becomes check digit 0", "args": ["4000000020"], "expect": { "valid": true, "normalised": "4000000020", "formatted": "400 000 0020", "reason": null } },
  { "name": "remainder 1 gives 10: no tenth digit can make this number valid, not even 0", "args": ["4000000080"], "expect": { "valid": false, "normalised": null, "formatted": null, "reason": "bad-check-digit" } },
  { "name": "remainder 1 gives 10, so a tenth digit of 1 fails too", "args": ["4000000081"], "expect": { "valid": false, "normalised": null, "formatted": null, "reason": "bad-check-digit" } },
  { "name": "the example with its check digit off by one", "args": ["9434765918"], "expect": { "valid": false, "normalised": null, "formatted": null, "reason": "bad-check-digit" } },
  { "name": "the example with its first two digits transposed", "args": ["4934765919"], "expect": { "valid": false, "normalised": null, "formatted": null, "reason": "bad-check-digit" } },
  { "name": "all zeros passes the arithmetic but is a placeholder", "args": ["0000000000"], "expect": { "valid": false, "normalised": null, "formatted": null, "reason": "placeholder" } },
  { "name": "all ones passes the arithmetic too, and is also a placeholder", "args": ["111 111 1111"], "expect": { "valid": false, "normalised": null, "formatted": null, "reason": "placeholder" } },
  { "name": "nine digits", "args": ["943476591"], "expect": { "valid": false, "normalised": null, "formatted": null, "reason": "bad-length" } },
  { "name": "eleven digits", "args": ["94347659190"], "expect": { "valid": false, "normalised": null, "formatted": null, "reason": "bad-length" } },
  { "name": "a letter O typed for a zero", "args": ["4OOOOOOOO4"], "expect": { "valid": false, "normalised": null, "formatted": null, "reason": "bad-character" } },
  { "name": "a dot is not an accepted separator", "args": ["943.476.5919"], "expect": { "valid": false, "normalised": null, "formatted": null, "reason": "bad-character" } },
  { "name": "the empty string", "args": [""], "expect": { "valid": false, "normalised": null, "formatted": null, "reason": "empty" } },
  { "name": "separators and nothing else", "args": [" - "], "expect": { "valid": false, "normalised": null, "formatted": null, "reason": "empty" } }
]