고객이 입력 한 호주 TFN 번호를 확인하고자합니다. 어딘가에 언급 된 공식 알고리즘이 있습니까?호주 TFN 번호의 유효성을 검사하는 알고리즘이 있습니까?
Wikipedia page은 간단한 모듈로 -11 알고리즘에 대해 언급하지만 이는 단지 예일뿐입니다. 자바 스크립트에서
고객이 입력 한 호주 TFN 번호를 확인하고자합니다. 어딘가에 언급 된 공식 알고리즘이 있습니까?호주 TFN 번호의 유효성을 검사하는 알고리즘이 있습니까?
Wikipedia page은 간단한 모듈로 -11 알고리즘에 대해 언급하지만 이는 단지 예일뿐입니다. 자바 스크립트에서
:
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.');
}
참조 :
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);
}
VB.Net에서 : C#에서 https://github.com/steveswinsburg/tfn-validator/blob/master/tfn-validator.html
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
감사합니다. Jeremy .. 솔루션에있는 계량 숫자는 Wikipedia 페이지에서 동일하지만 세금 부서의 공식적인 것들입니까? – ElevatedLyf
예, 그렇습니다. Australian Tax Office (호주 세무서)에 직접 연락하실 수 있습니다 : http://nnnnnn : http://softwaredevelopers.ato.gov.au/obtainTFNalgorithm. 저는 금융 분야에서 일하면서이 코드를 생산합니다. 그것의 올바른. –
해당 페이지의 예는 각 자릿수에 대한 가중치를 제공합니다. 동일한 알고리즘이 [여기] (http://www.mathgen.ch/codes/tfn.html) (및 다른 장소)에 제공됩니다. 그러나 두 페이지 모두에서 알 수 있듯이 공식적으로 ATO는 알고리즘에 대한 세부 정보를 제공하지 않습니다. – nnnnnn
예, 그렇습니다. 공식이있을 때까지는 가중치에 의존 할 수 없기 때문에 유효 숫자에 대한 오류가 발생할 수 있습니다. :) – ElevatedLyf
TFN - https://abr.business.gov.au/HelpAbnFormat.aspx의 경우 여기에 ABN 유효성 검사 알고리즘이 있지만 아무 것도 없습니다 – ElevatedLyf