Skip to content
ClearABN
Explore ClearABN

Free tool · runs in your browser

ABN validator: check a whole list of ABNs for typos

Paste ABNs from a supplier list, invoice batch or spreadsheet column. Each one is checked against the ATO’s modulus-89 check digits, so you can see which numbers are typos, which are 9-digit ACNs, and which appear twice, before you rely on them.

Spaces, dashes and a supplier name on the same line are fine, and you can paste a column straight from a spreadsheet. Up to 2,000 lines. This runs in your browser: nothing you paste is sent to ClearABN.

The working for 51 824 753 556 (the ABR's own example)

Subtract 1 from the first digit to get 41 824 753 556, multiply each digit by its weight, add them up and divide by 89.

Digit41824753556
Weight10135791113151719
Product4012410286355397585114

Total 534. 534 ÷ 89 = 6 remainder 0. Remainder 0, so the format is valid.

How ABN validation works

An ABN is 11 digits: a 9-digit identifier with two check digits in front. The Australian Business Register publishes the check: subtract 1 from the first digit, multiply each digit by its weight (10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19), add the 11 results and divide by 89. If the remainder is 0, the format is valid. For the ABR’s example, 51 824 753 556, the total is 534, which is 6 × 89 with nothing left over. Source: ABR, Format of the ABN.

In a spreadsheet

With the ABN in cell A2 (spaces are fine), this returns TRUE or FALSE. It uses only standard functions (IF, LEN, SUBSTITUTE, MID, SUMPRODUCT, MOD); we tested it in LibreOffice Calc.

Spreadsheet formula
=IF(LEN(SUBSTITUTE(A2," ",""))<>11,FALSE,MOD(SUMPRODUCT((MID(SUBSTITUTE(A2," ",""),{1,2,3,4,5,6,7,8,9,10,11},1)-{1,0,0,0,0,0,0,0,0,0,0})*{10,1,3,5,7,9,11,13,15,17,19}),89)=0)

In code

JavaScript / TypeScript
function isValidAbn(abn) {
  const digits = String(abn).replace(/\D/g, "");
  if (digits.length !== 11) return false;
  const weights = [10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19];
  const sum = [...digits].reduce(
    (total, d, i) => total + (Number(d) - (i === 0 ? 1 : 0)) * weights[i],
    0,
  );
  return sum % 89 === 0;
}
Python
import re

def is_valid_abn(abn: str) -> bool:
    digits = re.sub(r"\D", "", str(abn))
    if len(digits) != 11:
        return False
    weights = [10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
    total = sum((int(d) - (1 if i == 0 else 0)) * w
                for i, (d, w) in enumerate(zip(digits, weights)))
    return total % 89 == 0

These only check the format. To confirm an ABN is active, who it belongs to and whether it’s registered for GST, you need the register itself: use the free ABN lookup or check a supplier list.

Common questions

Does a valid checksum mean the ABN is real?

No. The checksum only shows the 11 digits are in the right format, which catches most typos. A number can pass and still never have been issued, be cancelled, or belong to a different business. To know that, look it up on the Australian Business Register.

Is my list sent anywhere?

No. The format check runs entirely in your browser. Nothing you paste is uploaded or stored. Register checks on the lookup and bulk pages are different: those send the ABN to ClearABN so it can query the register.

What if a supplier gave me a 9-digit number?

That's usually an Australian Company Number (ACN), which ASIC issues. ASIC notes that a company's ABN is often its ACN with two extra digits at the front. The validator lists the 11-digit numbers that would pass the checksum; look them up on the register to confirm which one, if any, is the company's ABN.

How do I check whether an ABN is active or registered for GST?

Use the free ABN lookup for one number, or upload a supplier list on the bulk check page, where the first 25 suppliers are free.

More: cancelled supplier ABNs · checking supplier GST registration · ASIC on ACNs and ABNs