2016-10-26 2 views
1

고객이 입력 한 호주 TFN 번호를 확인하고자합니다. 어딘가에 언급 된 공식 알고리즘이 있습니까?호주 TFN 번호의 유효성을 검사하는 알고리즘이 있습니까?

Wikipedia page은 간단한 모듈로 -11 알고리즘에 대해 언급하지만 이는 단지 예일뿐입니다. 자바 스크립트에서

+1

해당 페이지의 예는 각 자릿수에 대한 가중치를 제공합니다. 동일한 알고리즘이 [여기] (http://www.mathgen.ch/codes/tfn.html) (및 다른 장소)에 제공됩니다. 그러나 두 페이지 모두에서 알 수 있듯이 공식적으로 ATO는 알고리즘에 대한 세부 정보를 제공하지 않습니다. – nnnnnn

+0

예, 그렇습니다. 공식이있을 때까지는 가중치에 의존 할 수 없기 때문에 유효 숫자에 대한 오류가 발생할 수 있습니다. :) – ElevatedLyf

+0

TFN - https://abr.business.gov.au/HelpAbnFormat.aspx의 경우 여기에 ABN 유효성 검사 알고리즘이 있지만 아무 것도 없습니다 – ElevatedLyf

답변

0

:

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 
+0

감사합니다. Jeremy .. 솔루션에있는 계량 숫자는 Wikipedia 페이지에서 동일하지만 세금 부서의 공식적인 것들입니까? – ElevatedLyf

+0

예, 그렇습니다. Australian Tax Office (호주 세무서)에 직접 연락하실 수 있습니다 : http://nnnnnn : http://softwaredevelopers.ato.gov.au/obtainTFNalgorithm. 저는 금융 분야에서 일하면서이 코드를 생산합니다. 그것의 올바른. –

관련 문제