Jon*_*han 14 javascript validation numbers
我正在开发一个在线表格,其中需要验证用户输入的Medicare号码.
(我的具体问题涉及澳大利亚医疗保险号码,但我也很高兴得到有关美国医疗保险的答案.这个问题一般是关于医疗保险的数字.)
那我该怎么办呢?
(在Javascript或正则表达式中获得答案会很好.)
use*_*167 21
Jeffrey Kemp(3月11日)提供的正则表达式将有助于验证允许的字符,但下面的检查算法应足以验证该数字是否符合Medicare的规则.
Medicare卡号包括:
注意:Medicare卡号的第一个数字应在2到6的范围内.
Medicare卡号校验位计算
其中数字1是Medicare卡号的最高位值数字,数字8是Medicare卡号的最低位值数字.
示例:对于Medicare卡号"2123 45670 1",数字1为2,数字8为7.
示例: Medicare卡号为2123 4567.
资料来源:"在卫生软件系统中使用医疗保健标识符 - 软件一致性要求,版本1.4",NEHTA,3/05/2011
这是一个 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/
如果您正在寻找 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,您可能想要抛出异常。
澄清:
GetMedicareChecksum方法计算的校验位。希望有人觉得这很有用。
| 归档时间: |
|
| 查看次数: |
13822 次 |
| 最近记录: |