---
url: /sensored/detectors/financial.md
---
# Financial Detectors

## payment_card

Detects payment card numbers (13–19 digits) with Luhn checksum validation.
Supports single-separator group formats and rejects substrings of longer digit
sequences.

```ts
const redactor = createRedactor({
  rules: { payment_card: { action: "redact" } },
});

redactor.redact("Card: 4532-1234-5678-9012");
// "Card: [PAYMENT_CARD_1]"
```

* **ID**: `payment_card`
* **Entity type**: `payment_card`
* **Context required**: No
* **Stream supported**: Yes
* **Validation**: Luhn checksum, length (13–19 digits), separator format

## iban

Detects IBANs for SEPA countries using a country-length map and mod-97 checksum
validation (via BigInt).

```ts
const redactor = createRedactor({
  rules: { iban: { action: "redact" } },
});

redactor.redact("IBAN: GB82 WEST 1234 5698 7654 32");
// "IBAN: [IBAN_1]"
```

* **ID**: `iban`
* **Entity type**: `iban`
* **Context required**: No
* **Stream supported**: Yes (maxMatchLength: 38)
* **Validation**: Country-specific length, mod-97 checksum

## eu_vat

Detects EU VAT numbers for DE (format only), FR (Luhn on SIREN), IT (Luhn), ES
(mod-23 letter check), and NL (mod-11 weighted sum).

```ts
const redactor = createRedactor({
  rules: { eu_vat: { action: "redact" } },
});

redactor.redact("VAT: DE123456789");
// "VAT: [EU_VAT_1]"
```

* **ID**: `eu_vat`
* **Entity type**: `eu_vat`
* **Context required**: No
* **Stream supported**: Yes (maxMatchLength: 15)
* **Validation**: Country-specific checksum (Luhn, mod-23, or mod-11)

## swift_bic

Detects SWIFT/BIC codes (8 or 11 characters: bank code + country + location +
optional branch).

```ts
const redactor = createRedactor({
  rules: { swift_bic: { action: "redact" } },
});

redactor.redact("BIC: DEUTDEFF500");
// "BIC: [SWIFT_BIC_1]"
```

* **ID**: `swift_bic`
* **Entity type**: `swift_bic`
* **Context required**: Yes (labels: BIC, SWIFT, Bank, Payment)
* **Stream supported**: Yes
* **Validation**: Format (8 or 11 chars, valid bank code, country, location)

## uk_sort_code

Detects UK bank sort codes (6 digits, hyphenated or spaced formats).

```ts
const redactor = createRedactor({
  rules: { uk_sort_code: { action: "redact" } },
});

redactor.redact("Sort code: 12-34-56");
// "Sort code: [UK_SORT_CODE_1]"
```

* **ID**: `uk_sort_code`
* **Entity type**: `uk_sort_code`
* **Context required**: Yes (labels: Sort, Branch, Bank)
* **Stream supported**: Yes
* **Validation**: 6-digit format with hyphen or space separators

## us_routing

Detects US ABA routing numbers (9 digits with specific prefix ranges).

```ts
const redactor = createRedactor({
  rules: { us_routing: { action: "redact" } },
});

redactor.redact("Routing: 021000021");
// "Routing: [US_ROUTING_1]"
```

* **ID**: `us_routing`
* **Entity type**: `us_routing`
* **Context required**: Yes (labels: Routing, ABA, ACH, Bank)
* **Stream supported**: Yes
* **Validation**: 9 digits, prefix range check (0-1, 1-2, 2-1, 2-2), checksum
  validation

## uk_bank_account

Detects UK bank account numbers (6–8 digits).

```ts
const redactor = createRedactor({
  rules: { uk_bank_account: { action: "redact" } },
});

redactor.redact("Account: 12345678");
// "Account: [UK_BANK_ACCOUNT_1]"
```

* **ID**: `uk_bank_account`
* **Entity type**: `uk_bank_account`
* **Context required**: Yes (labels: Account, Bank, Building Society)
* **Stream supported**: Yes
* **Validation**: 6–8 digit format

## card_data

Detects card data tokens including magnetic stripe tracks, CVV/CVC codes, and
expiry dates. Requires nearby context labels.

```ts
const redactor = createRedactor({
  rules: { card_data: { action: "redact" } },
});

redactor.redact("CVV: 123");
// "CVV: [CARD_DATA_1]"
```

* **ID**: `card_data`
* **Entity type**: `card_data`
* **Context required**: Yes (labels: Card, Payment, Credit, Debit, Visa,
  Mastercard, Amex, CVV, CVC, Expiry, Track, Magnetic, Stripe)
* **Stream supported**: Yes (maxMatchLength: 100)
* **Validation**: Context label presence

## financial_reference

Detects financial reference numbers such as transaction IDs, wire transfer
references, statement numbers, and payment references. Requires nearby context
labels.

```ts
const redactor = createRedactor({
  rules: { financial_reference: { action: "redact" } },
});

redactor.redact("Transaction ID: TXN12345678");
// "Transaction ID: [FINANCIAL_REFERENCE_1]"
```

* **ID**: `financial_reference`
* **Entity type**: `financial_reference`
* **Context required**: Yes (labels: Transaction, TXN, Wire, Transfer,
  Remittance, Statement, Payment, Financial, Banking)
* **Stream supported**: Yes (maxMatchLength: 30)
* **Validation**: Context label presence

## investment_account

Detects investment account numbers including ISA, SIPP, pension, 401K, IRA,
trading, brokerage, loan, and mortgage accounts. Requires nearby context labels.

```ts
const redactor = createRedactor({
  rules: { investment_account: { action: "redact" } },
});

redactor.redact("ISA Account No: INV123456");
// "ISA Account No: [INVESTMENT_ACCOUNT_1]"
```

* **ID**: `investment_account`
* **Entity type**: `investment_account`
* **Context required**: Yes (labels: ISA, SIPP, Invest, Pension, 401K, IRA,
  Account, Fund, Trading, Brokerage, Stock, Loan, Mortgage, Credit)
* **Stream supported**: Yes (maxMatchLength: 30)
* **Validation**: Context label presence

## payment_gateway_id

Detects payment gateway IDs such as Stripe tokens, customer IDs, subscription
IDs, merchant IDs, and terminal IDs. Requires nearby context labels.

```ts
const redactor = createRedactor({
  rules: { payment_gateway_id: { action: "redact" } },
});

redactor.redact("Customer ID: cus_abc123def456");
// "Customer ID: [PAYMENT_GATEWAY_ID_1]"
```

* **ID**: `payment_gateway_id`
* **Entity type**: `payment_gateway_id`
* **Context required**: Yes (labels: Stripe, Payment, Gateway, Token, Customer,
  Subscription, Merchant, Terminal, POS)
* **Stream supported**: Yes (maxMatchLength: 50)
* **Validation**: Context label presence
