In 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.');
}
Ref: https://github.com/steveswinsburg/tfn-validator/blob/master/tfn-validator.html
In 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;
var digits = tfn.ToArray();
//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);
}
In VB.Net:
Private Shared Sub Main(args As String())
Dim count As Integer = 0
Dim sb As New StringBuilder()
Dim random As New Random()
While count < 500000
Dim randomNumber As Integer = random.[Next](100000000, 999999999)
If ValidateTFN(randomNumber.ToString()) Then
sb.AppendLine(randomNumber.ToString())
count += 1
End If
End While
System.IO.File.WriteAllText("TFNs.txt", sb.ToString())
End Sub
Public Shared Function ValidateTFN(tfn As String) As Boolean
'validate only digits
If Not IsNumeric(tfn) Then
Return False
End If
'validate length
If tfn.Length <> 9 Then
Return False
End If
Dim digits = tfn.ToArray()
'do the calcs
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
Public Shared Function IsNumeric(s As String) As Boolean
Dim output As Single
Return Single.TryParse(s, output)
End Function
Das Beispiel auf dieser Seite tut für jede Ziffer der Gewichtungen geben. Derselbe Algorithmus wird [hier] (http://www.mathgen.ch/codes/tfn.html) (und anderen Orten) zur Verfügung gestellt. Aber wie auf beiden Seiten gesagt wird, liefert der ATO offiziell keine Details über den Algorithmus, obwohl bekannt ist, was er ist. – nnnnnn
Ja, aber das ist was. Bis es etwas Offizielles gibt, können wir uns nicht auf diese Gewichtungsfaktoren verlassen, sonst könnten wir auch Fehler für gültige Zahlen werfen. :) – ElevatedLyf
Es gibt einen ABN Validierungsalgorithmus hier aber nichts für die TFN - https://abr.business.gov.au/HelpAbnFormat.aspx – ElevatedLyf