我正在开发一个在线表单,其中用户输入的联邦医疗保险号码将需要验证。
(我的具体问题与澳大利亚的医疗保险数字有关,但我也很高兴得到关于美国的答案。这个问题是关于一般的联邦医疗保险数字。)
那么我该怎么做呢?
(最好用Javascript或正则表达式来提供答案。)
发布于 2013-04-05 08:05:02
Jeffrey Kemp (3月11日)提供的正则表达式将有助于验证允许的字符,但下面的检查算法应该足以验证数字是否符合联邦医疗保险的规则。
联邦医疗保险卡号包括:
注:联邦医疗保险卡号的第一位数字应在2到6之间。
联邦医疗保险卡号校验位计算
其中数字1是联邦医疗保险卡号的最高位值数字,而数字8是联邦医疗保险卡号的最低位值数字。
示例:医疗保险卡号'2123 45670 1‘的,数字1是2,数字8是7。
示例:医疗保险卡号为2123 4567的。
资料来源:“在健康软件系统中使用医疗保健标识符-软件一致性要求,版本1.4",NEHTA,3/05/2011
发布于 2016-12-09 14:11:59
如果你正在寻找一个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;
}
注意:对于null值,这将返回false,您可能希望抛出异常。
要澄清的:
GetMedicareChecksum
方法计算的校验位。希望有人觉得这很有用。
发布于 2018-09-14 10:58:52
以下是Typescript或现代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/
https://stackoverflow.com/questions/3589345
复制相似问题