我如何验证澳大利亚医疗保险号码?

Jon*_*han 14 javascript validation numbers

我正在开发一个在线表格,其中需要验证用户输入的Medicare号码.

(我的具体问题涉及澳大利亚医疗保险号码,但我也很高兴得到有关美国医疗保险的答案.这个问题一般是关于医疗保险的数字.)

那我该怎么办呢?

(在Javascript或正则表达式中获得答案会很好.)

use*_*167 21

Jeffrey Kemp(3月11日)提供的正则表达式将有助于验证允许的字符,但下面的检查算法应足以验证该数字是否符合Medicare的规则.

Medicare卡号包括:

  • 八位数;
  • 校验位(一位数); 和
  • 发行号码(一位数).

注意:Medicare卡号的第一个数字应在2到6的范围内.

Medicare卡号校验位计算

  1. 计算总和:((数字1)+(数字2*3)+(数字3*7)+(数字4*9)+(数字5)+(数字6*3)+(数字7*7) +(数字8*9))

其中数字1是Medicare卡号的最高位值数字,数字8是Medicare卡号的最低位值数字.

示例:对于Medicare卡号"2123 45670 1",数字1为2,数字8为7.

  1. 将计算的总和除以10.
  2. 校验位是余数.

示例: Medicare卡号为2123 4567.

  1. (2)+(1*3)+(2*7)+(3*9)+(4)+(5*3)+(6*7)+(7*9)= 170
  2. 将170除以10.余数为0.
  3. 此Medicare号码的校验位为0.

资料来源:"在卫生软件系统中使用医疗保健标识符 - 软件一致性要求,版本1.4",NEHTA,3/05/2011

  • 描述Medicare数字格式的另一个好资源:http://clearwater.com.au/code/medicare也有一些Javascript. (2认同)

Ben*_*apa 6

这是一个 Typescript 或现代 Javascript 解决方案:

  validateMedicare(medicare) {
    let isValid = false;

    if (medicare && medicare.length === 10) {
      const matches = medicare.match(/^(\d{8})(\d)/);

      if (!matches) {
        return false;
      }

      const base = matches[1];
      const checkDigit = matches[2];
      const weights = [1, 3, 7, 9, 1, 3, 7, 9];

      let sum = 0;
      for (let i = 0; i < weights.length; i++) {
        sum += parseInt(base[i], 10) * weights[i];
      }

      isValid = sum % 10 === parseInt(checkDigit, 10);
    }

    return isValid;
  }
Run Code Online (Sandbox Code Playgroud)

请参阅http://clearwater.com.au/code/medicare了解说明。

要进行测试,请在此处生成医疗保险号码:https ://precedencehealthcare.com/rmig/

  • return {invalid: true} 应该返回 false。 (2认同)

Dan*_*eño 5

如果您正在寻找 C# 版本,请尝试一下:

using System.Linq;

//...

public bool IsMedicareFormatValid(string medicareNumber)
{
    if (!(medicareNumber?.Length >= 10 && medicareNumber.Length <12) || !medicareNumber.All(char.IsDigit))
        return false;

    var digits = medicareNumber.Select(c => (int) char.GetNumericValue(c)).ToArray();
    return digits[8] == GetMedicareChecksum(digits.Take(8).ToArray());
}

private int GetMedicareChecksum(int[] digits)
{
    return digits.Zip(new[] { 1, 3, 7, 9, 1, 3, 7, 9 }, (m, d) => m*d).Sum() % 10;
}
Run Code Online (Sandbox Code Playgroud)

注意:对于空值,这将返回 false,您可能想要抛出异常。

澄清:

  1. 医疗保险卡中的前 9 个数字将对应于实际医疗保险编号(用于支票)。
  2. 第9位是该GetMedicareChecksum方法计算的校验位。
  3. 第 10 位数字标识卡的编号,因此如果您已获得 3 张卡(因为您丢失或其他原因),则编号为 3
  4. 第 11 位数字将标识组内的家庭成员。

希望有人觉得这很有用。