Validates NHS numbers using the NHS checksum applied to the
first 9 digits and compared with the 10th digit. Inputs that are
not exactly 10 numeric characters are invalid. Numbers made of the same
repeated digit (e.g., "1111111111", "0000000000") are also rejected.
Usage
valid_nhs(nhs_number)
Value
A numeric vector of the same length as nhs_number containing:
1 if the value is a valid NHS number
0 otherwise
Arguments
nhs_number
A vector of values to validate. Each element is coerced to
character for length checking and digit extraction.
Details
Algorithm (summary):
Take the first 9 digits and multiply by weights 10 down to 2 (i.e.,
d1×10 + d2×9 + … + d9×2).
Compute 11 - (sum %% 11) → this is the expected check digit.
If the expected check digit is 11, treat as 0.
Compare with the 10th digit. If they match, the number is valid.
Additional guards implemented:
If the NHS number is NA or not 10 characters, it is invalid.
If all 10 digits are identical (e.g., "1111111111"), it is invalid.
The function is vectorised and returns 1 for valid and 0 for invalid
for each element in the input vector.