Ele*_*Lyf 3 javascript c# vb.net algorithm validation
我们正在验证客户输入的澳大利亚 TFN 号码。有没有在某处提到任何官方算法?
维基百科页面提到了一个简单的模 11 算法,但看起来这只是一个例子。
在 JavaScript 9 位中:
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.');
}
Run Code Online (Sandbox Code Playgroud)
参考:https://github.com/steveswinsburg/tfn-validator/blob/master/tfn-validator.html
在 C# 9 位中:
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);
}
Run Code Online (Sandbox Code Playgroud)
参考: https: //softwaredevelopers.ato.gov.au/obtainTFNalgorithm
在 C# 8 位中:
public static bool ValidateTFN(string tfn)
{
//validate only digits
if (!IsNumeric(tfn)) return false;
//validate length
if (tfn.Length != 8) return false;
int[] digits = Array.ConvertAll(tfn.ToArray(), c => (int)Char.GetNumericValue(c));
//do the calcs
var sum = (digits[0] * 10)
+ (digits[1] * 7)
+ (digits[2] * 8)
+ (digits[3] * 4)
+ (digits[4] * 6)
+ (digits[5] * 3)
+ (digits[6] * 5)
+ (digits[7] * 1);
var remainder = sum % 11;
return (remainder == 0);
}
Run Code Online (Sandbox Code Playgroud)
参考: https: //jeremythompson.net/Rocks/TFN_algorithm_8_digit.pdf
在 VB.Net 9 位中:
Public Shared Function ValidateTFN(ByVal tfn As String) As Boolean
If Not IsNumeric(tfn) Then Return False
If tfn.Length <> 9 Then Return False
Dim digits As Integer() = Array.ConvertAll(tfn.ToArray(), Function(c) CInt(Char.GetNumericValue(c)))
Dim 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)
Dim remainder = sum Mod 11
Return (remainder = 0)
End Function
Run Code Online (Sandbox Code Playgroud)
在 PHP 9 位中:
function ValidateTFN($tfn)
{
$weights = array(1, 4, 3, 7, 5, 8, 6, 9, 10);
// strip anything other than digits
$tfn = preg_replace("/[^\d]/","",$tfn);
// check length is 9 digits
if (strlen($tfn)==9) {
$sum = 0;
foreach ($weights as $position=>$weight) {
$digit = $tfn[$position];
$sum += $weight * $digit;
}
return ($sum % 11)==0;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
参考: https: //clearwater.com.au/code/tfn