Click here to Skip to main content
15,900,461 members
Articles / Programming Languages / Javascript

ABN Validator for Australia

Rate me:
Please Sign up or sign in to vote.
1.75/5 (3 votes)
24 Aug 2020CPOL 6.8K   1   6
Simple function to validate the ABN for Australian's trade
Here, you will see a validator to calculate if the ABN number is correct or not.

Introduction

In this post, you will see a simple function to validate the ABN for Australian's trade. This validator is for calculating if the ABN number is correct or not. I create a function in JavaScript and C#. I hope this will help you in some way.

C# Version

C#
/// Check if the ABN number is correct
/// number to check.
public static bool Abn_Validator(string ABN)
{
bool result;
ABN = ABN.Trim().Replace(" ", "");
if (ABN.Length == 11)
{
try            //this try cach is because if user try to send 123A567890B get exception
{
char[] nums = ABN.ToArray();
int[] control = new int[11];
control[0] = (Convert.ToInt32(nums[0].ToString()) - 1) * 10;
control[1] = Convert.ToInt32(nums[1].ToString());
control[2] = Convert.ToInt32(nums[2].ToString()) * 3;
control[3] = Convert.ToInt32(nums[3].ToString()) * 5;
control[4] = Convert.ToInt32(nums[4].ToString()) * 7;
control[5] = Convert.ToInt32(nums[5].ToString()) * 9;
control[6] = Convert.ToInt32(nums[6].ToString()) * 11;
control[7] = Convert.ToInt32(nums[7].ToString()) * 13;
control[8] = Convert.ToInt32(nums[8].ToString()) * 15;
control[9] = Convert.ToInt32(nums[9].ToString()) * 17;
control[10] = Convert.ToInt32(nums[10].ToString()) * 19;

int total = 0;
for (int i = 0; i < 11; i++)
{
total += control[i];
}

if (total % 89 == 0) result = true;
else result = false;
}
catch
{
result = false;
}
}
else result = false;

return result;
}

JavaScript Version

JavaScript
function Abn_Validator(myAbn)
    {
        let result = false;
        let ABN;
        try {
            ABN = myAbn.value;
        } catch (e) {
            ABN = '';
        }
        if (ABN.length == 11) {
            try {
                let control = new Array(11);
                control[0] = (convert2integer(ABN[0],false) - 1) * 10;
                control[1] = convert2integer(ABN[1], false);
                control[2] = convert2integer(ABN[2], false) * 3;
                control[3] = convert2integer(ABN[3], false) * 5;
                control[4] = convert2integer(ABN[4], false) * 7;
                control[5] = convert2integer(ABN[5], false) * 9;
                control[6] = convert2integer(ABN[6], false) * 11;
                control[7] = convert2integer(ABN[7], false) * 13;
                control[8] = convert2integer(ABN[8], false) * 15;
                control[9] = convert2integer(ABN[9], false) * 17;
                control[10] = convert2integer(ABN[10], false) * 19;
                let total = 0;
                for (let i = 0; i < 11; i++)
                {
                    total += control[i];
                }

                if (total % 89 == 0) result = true;
                else result = false;
            }
            catch
            {
                result = false;
            }
        }
        else result = false;
        return result;
    }

History

  • 22nd August, 2020: Initial version
  • 24th August 2020: change variables name from spanish to english.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer DrUalcman
Philippines Philippines
I am a programmer with skill in c#, VB, MVC, .NET CORE, JAVASCRPT, HTML, ASP, CSS, windows forms, windows app.

I like help the dev community with my experiencies, and sharing my code to everybody.

Comments and Discussions

 
GeneralA little refactor Pin
TheQult23-Aug-20 23:41
professionalTheQult23-Aug-20 23:41 
//We memorize control numbers here instead than in the method
static int[] controlValues = new[] { 1, 3, 5, 7, 9, 11 , 13, 15, 17, 19 };

public static bool Abn_Validator(string ABN)
{
    //We can put the validation here, without encapsulating the whole method code inside the 'if (ABN has the correct format)'
    if(string.IsNullOrEmpty(ABN) || ABN.Length != 11) return false;

    //This will perform the same action of Trim().Replace(" ", "") and the whole conversion of single digits into numbers
    var digits = ABN.Where(char.IsDigit)
                    .Select(c => int.Parse($"{c}"))
                    .ToArray();

    //We do the sum of multiplication digit per digit of our values
    var sum = digits.Skip(1)
            .Zip(controlValues, (digit, control)=> digit * control)
            .Sum()
            + (digits[0] - 1) * 10;


    //We compute and return if the sum is correct or not
    return sum % 89 ==0;
}

PraiseRe: A little refactor Pin
Sergi Ortiz Gomez24-Aug-20 0:07
professionalSergi Ortiz Gomez24-Aug-20 0:07 
GeneralRe: A little refactor Pin
kaos_12124-Aug-20 12:22
professionalkaos_12124-Aug-20 12:22 
GeneralHow not to code Pin
TheQult23-Aug-20 23:21
professionalTheQult23-Aug-20 23:21 
PraiseRe: How not to code Pin
Sergi Ortiz Gomez23-Aug-20 23:59
professionalSergi Ortiz Gomez23-Aug-20 23:59 
GeneralRe: How not to code Pin
Garth J Lancaster24-Aug-20 19:51
professionalGarth J Lancaster24-Aug-20 19:51 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.