首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何验证澳大利亚联邦医疗保险号码?

如何验证澳大利亚联邦医疗保险号码?
EN

Stack Overflow用户
提问于 2010-08-28 11:23:46
回答 14查看 22.2K关注 0票数 19

我正在开发一个在线表单,其中用户输入的联邦医疗保险号码将需要验证。

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

那么我该怎么做呢?

(最好用Javascript或正则表达式来提供答案。)

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2013-04-05 08:05:02

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

联邦医疗保险卡号包括:

  • 八位数;
  • A校验数位(一位数);
  • 一个问题编号(一位数)。

注:联邦医疗保险卡号的第一位数字应在2到6之间。

联邦医疗保险卡号校验位计算

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

其中数字1是联邦医疗保险卡号的最高位值数字,而数字8是联邦医疗保险卡号的最低位值数字。

示例:医疗保险卡号'2123 45670 1‘的,数字1是2,数字8是7。

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

示例:医疗保险卡号为2123 4567的

  1. (2 ) + (1 * 3) +(2* 7) + (3 * 9) + (4) + (5 * 3) + (6 * 7) + (7 * 9) = 170
  2. 除以10。余数是0。
  3. 此联邦医疗保险号码的校验位是0。

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

票数 30
EN

Stack Overflow用户

发布于 2016-12-09 14:11:59

如果你正在寻找一个C#版本,试试这个:

代码语言:javascript
运行
复制
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;
}

注意:对于null值,这将返回false,您可能希望抛出异常。

要澄清的

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

希望有人觉得这很有用。

票数 5
EN

Stack Overflow用户

发布于 2018-09-14 10:58:52

以下是Typescript或现代Javascript解决方案:

代码语言:javascript
运行
复制
  validateMedicare(medicare) {
    let isValid = false;

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

      if (!matches) {
        return { invalid: true };
      }

      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;
  }

有关说明,请参考http://clearwater.com.au/code/medicare

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3589345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档