javascript - 是否有任何算法来验证澳大利亚 TFN 号码?

标签 javascript c# vb.net algorithm validation

我们希望验证客户输入的澳大利亚 TFN 号码。 有没有在某处提到任何官方算法?

Wikipedia page提到了一个简单的模 11 算法,但它似乎只是一个例子。

最佳答案

在 Javascript 中:

var tfn = $('#tfn').val();

//remove spaces and update
tfn = tfn.replace(/\s+/g, '');
$('#tfn').val(tfn);

//remove hyphens and update
tfn = tfn.replace(/[-]/g, '');
$('#tfn').val(tfn);

//validate only digits
var isNumber = /^[0-9]+$/.test(tfn);
if(!isNumber) {
    return doError('Invalid TFN, only numbers are allowed.');
}

//validate length
var length = tfn.length;
if(length != 9) {
    return doError('Invalid TFN, must have 9 digits.');
}

var digits = tfn.split('');

//do the calcs
var sum = (digits[0]*1)
        + (digits[1]*4)
        + (digits[2]*3)
        + (digits[3]*7)
        + (digits[4]*5)
        + (digits[5]*8)
        + (digits[6]*6)
        + (digits[7]*9)
        + (digits[8]*10);

var remainder = sum % 11;

if(remainder == 0) {
    doSuccess('Valid TFN, hooray!');
} else {
    return doError('Invalid TFN, check the digits.');
}

引用:https://github.com/steveswinsburg/tfn-validator/blob/master/tfn-validator.html

在 C# 中:

static void Main(string[] args)
{
    int count = 0;
    StringBuilder sb = new StringBuilder();
    Random random = new Random();
    while (count < 500000) {                
        int randomNumber = random.Next(100000000, 999999999);
        if (ValidateTFN(randomNumber.ToString()))
        {
            sb.AppendLine(randomNumber.ToString());
            count++;
        }
    }
    System.IO.File.WriteAllText("TFNs.txt", sb.ToString());
}


public static bool ValidateTFN(string tfn)
{
    //validate only digits
    if (!IsNumeric(tfn)) return false;

    //validate length
    if (tfn.Length != 9) return false;

    int[] digits = Array.ConvertAll(tfn.ToArray(), c => (int)Char.GetNumericValue(c));

    //do the calcs
    var sum = (digits[0] * 1)
            + (digits[1] * 4)
            + (digits[2] * 3)
            + (digits[3] * 7)
            + (digits[4] * 5)
            + (digits[5] * 8)
            + (digits[6] * 6)
            + (digits[7] * 9)
            + (digits[8] * 10);

    var remainder = sum % 11;
    return (remainder == 0);
}

public static bool IsNumeric(string s)
{
    float output;
    return float.TryParse(s, out output);
}

关于javascript - 是否有任何算法来验证澳大利亚 TFN 号码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40252533/

相关文章:

JavaScript:我可以将方括号 ([]) 运算符用作函数吗?

c# - 在 View 中经过一定时间后自动移动用户

javascript - 下载文件时 ASP.NET Core 忙指示器

javascript - 隐藏在 Angular Bootstrap Accordion 中的动态内容

c# - JSON.NET 如何设置 get-only IEnumerable<T> 属性?

c# - 寻找一种干净的方法将字符串列表转换为 C# 中的有效 List<long>

vb.net - 良好的编程礼仪/良好的编程实践

mysql - 获取 CheckedListbox 中选中项目的值

vb.net - 选项卡控件的粗体文本

c# - 从 .NET Web 服务方法向 Javascript 客户端返回错误条件