BIC / SWIFT Checker

ISO 9362

Parse and validate BIC/SWIFT codes. Checks structural format, country code, and whether the BIC appears in a reference dataset of known institutions. Detects test BICs and passive participants.

8 characters (primary office) or 11 characters (specific branch). Input is normalised to uppercase.

Try an example:

Enter a BIC/SWIFT code above to validate it

What is checked

  • Format Verifies length (8 or 11 characters) and character pattern — 4 letters (bank), 2 letters (country), 2 alphanumeric (location), optional 3 alphanumeric (branch).
  • Country code Confirms the two-letter country segment is a recognised ISO 3166-1 alpha-2 code.
  • Dataset lookup Checks the BIC against a curated reference dataset of ~80 known institutions. A match provides stronger confidence but is not a live SWIFT registry check.
  • Location code flags Surfaces test BICs (second location character = 0) and passive participants (second location character = 1) per ISO 9362 convention.

BIC structure (ISO 9362)

BBBB — 4-letter bank code (institution identifier)

CC — 2-letter ISO 3166-1 country code

LL — 2-character location code (letters or digits)

BBB — optional 3-character branch code (omit or use XXX for primary office)

Common issues

  • Format valid ≠ registered. A BIC can pass all structural checks and still not correspond to any real institution. Always confirm with your bank or PSP before routing payments.
  • 8 vs 11 characters.Sending to a primary BIC (8-char) routes to the bank's main office. An 11-char BIC targets a specific branch. Appending XXX to an 8-char BIC is equivalent to the primary office — some systems require the explicit 11-char form.
  • Location code second character. 0 = test BIC (not for production). 1 = passive participant (may not be directly reachable on SWIFT). Both are flagged automatically.

Dev snippet — parse BIC (JavaScript)

function parseBic(raw) {
  const bic = raw.trim().toUpperCase();
  if (!/^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$/.test(bic)) return null;
  const locationCode = bic.slice(6, 8);
  return {
    bankCode:     bic.slice(0, 4),
    countryCode:  bic.slice(4, 6),
    locationCode,
    branchCode:   bic.length === 11 ? bic.slice(8) : "XXX",
    isPrimary:    bic.length === 8,
    isTestBic:    locationCode[1] === "0",
    isPassive:    locationCode[1] === "1",
  };
}