Simple function to check for a valid NHS number (with example usage)
<?php
// start with our test NHS number
$nhs_no = '401 023 2137';
function validNhsNumber($nhs_no)
{
    // save the input number for the exception
    $input_nhs_no = $nhs_no;
    // stip all non alpha numeric
    $nhs_no = preg_replace("/[^0-9]/ui", "", $input_nhs_no);
    // check the length
    if (strlen($nhs_no) <> 10) {
        throw new Exception("Bad NHS number ({$input_nhs_no})");
    }
    // explode the string into an array
    $nhs_no = str_split($nhs_no);
    // get our checksum val from the input
    $nhs_checksum = (int)array_pop($nhs_no);
    // set an empty checksum
    $checksum = 0;
    // now we have to do the math...
    foreach ($nhs_no as $key => $value) {
        $checksum += (int)$value * (10 - (int)$key);
    }
    // divide the checksum by 11
    $checksum = $checksum % 11;
    // remove 11 from the checksum
    $checksum = 11 - $checksum;
    // if the checksum is 10 then its invalid
    if ($checksum === 10) {
        throw new Exception("Bad NHS number ({$input_nhs_no})");
    }
    // if the checksum is 11, then set it to 0
    if ($checksum === 11) {
        $checksum = 0;
    }
    // if the checksum matches the nhs_checksum then were valid
    if ($checksum <> $nhs_checksum) {
        throw new Exception("Bad NHS number ({$input_nhs_no})");
    }
    // we have a valid NHS number (mathmatically)
    return preg_replace("/[^0-9]/ui", "", $input_nhs_no);
}
try {
    $valid_nhs_no = validNhsNumber($nhs_no);
} catch (Exception $e) {
    print $e->getMessage() . PHP_EOL;
}
if (!empty($valid_nhs_no)) {
    print "YAY! {$valid_nhs_no} is a valid NHS Number\r\n";
}