ABN Validation

10 April 2007 17:48 (EST)
Australian Business Number (ABN) validation function, based on ABN format description from Australian Taxation Office (ATO):

<cffunction name="isValidABN" returntype="boolean" access="public" output="false">
   <cfargument name="ABN" type="string" required="true" />

   <cfset var aWeight = listtoarray("10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19") />
   <cfset var sABN = "" />
   <cfset var i = 0 />
   <cfset var hashSum = 0 />

   <cfset sABN = rereplace(arguments.ABN,"[^\d]","","all") />

   <cfif len(sABN) eq 11>
      <cfloop index="i" from="1" to="11">
         <cfset hashSum = hashSum + aWeight[i]*(mid(sABN,i,1)-iif(i eq 1,de(1),de(0))) />
      </cfloop>
      <cfif hashSum mod 89 eq 0>
         <cfreturn true />
      </cfif>
   </cfif>

   <cfreturn false />

</cffunction>