# OCR Confusable Characters Reference: Pairs, Risky Fields and Validation Rules

> Source: https://netray.co/tools/ocr-confusable-characters-reference
> Publisher: Netray (netray.co), AI and integration engineering for ERP and manufacturing systems.
> Section: Free Tools

## Short answer

A lookup of look-alike characters (0 and O, 1 and l, 5 and S and more) with the fields where they cause errors and a validation rule for each.

## Category

quality

## Audience

- AP analyst
- ERP developer
- Quality engineer

## Tool

**Kind:** worksheet

**Mode:** reference

**Columns:**

#### Printed as

**Key:** printed

**Type:** text

#### Often misread as

**Key:** misread

**Type:** text

#### Typical cause

**Key:** cause

**Type:** text

#### Fields most at risk

**Key:** field

**Type:** text

#### Validation or fix

**Key:** rule

**Type:** text

**Rows:**

#### Similar round shapes, slashed zero fonts

**Printed:** 0 (zero)

**Misread:** O (letter)

**Field:** Part numbers, PO numbers, serial numbers

**Rule:** Apply numeric-only pattern to numeric fields and replace O with 0 there

#### Same as above

**Printed:** O (letter)

**Misread:** 0 (zero)

**Field:** Alphanumeric codes, supplier IDs

**Rule:** Check against master list of valid codes

#### Vertical strokes in sans serif fonts

**Printed:** 1 (one)

**Misread:** l (lowercase L) or I

**Field:** Invoice numbers, quantities

**Rule:** Numeric field pattern, then fix l and I to 1

#### Same as above

**Printed:** l (lowercase L)

**Misread:** 1 or I

**Field:** Descriptions, alphanumeric references

**Rule:** Dictionary check on description words

#### Same as above

**Printed:** I (capital i)

**Misread:** 1 or l

**Field:** Part numbers with prefixes

**Rule:** Validate prefix against part master

#### Curved top and bottom, low resolution

**Printed:** 5

**Misread:** S

**Field:** Invoice numbers, tax IDs

**Rule:** Checksum or format check for tax IDs

#### Same as above

**Printed:** S

**Misread:** 5 or 8

**Field:** Alphanumeric references

**Rule:** Pattern check per field

#### Closed loops fill in on poor scans

**Printed:** 8

**Misread:** B or 3

**Field:** Amounts, part numbers

**Rule:** Recompute totals from line amounts to expose errors

#### Same as above

**Printed:** B

**Misread:** 8

**Field:** Part number suffixes, lot codes

**Rule:** Lookup against allowed suffixes

#### Similar diagonal stroke

**Printed:** 2

**Misread:** Z

**Field:** Dates, codes

**Rule:** Date validation rejects impossible values

#### Loop and tail merge in small print

**Printed:** 6

**Misread:** G or b

**Field:** Amounts, reference numbers

**Rule:** Totals reconciliation and format check

#### Loop and tail similarity

**Printed:** 9

**Misread:** g or q

**Field:** Amounts, reference numbers

**Rule:** Totals reconciliation and format check

#### Open top on faint print

**Printed:** 4

**Misread:** A or 9

**Field:** Dates, part numbers

**Rule:** Date range check and part master lookup

#### Faint horizontal bar

**Printed:** 7

**Misread:** 1 or T

**Field:** Dates, amounts

**Rule:** Date range check and totals reconciliation

#### Letters touch at small sizes

**Printed:** rn

**Misread:** m

**Field:** Supplier names, descriptions

**Rule:** Fuzzy match to vendor master

#### Letters split at small sizes

**Printed:** m

**Misread:** rn

**Field:** Supplier names, descriptions

**Rule:** Fuzzy match to vendor master

#### Gap between letters closes up

**Printed:** cl

**Misread:** d

**Field:** Descriptions, names

**Rule:** Dictionary or vendor master check

#### Adjacent letters merge

**Printed:** vv

**Misread:** w

**Field:** Supplier names

**Rule:** Fuzzy match to vendor master

#### Both are small marks at the baseline

**Printed:** . (decimal point)

**Misread:** , (comma)

**Field:** Amounts, quantities, unit prices

**Rule:** Detect locale per supplier, recompute line extension and compare to total

#### Same as above, plus European formats

**Printed:** , (thousands comma)

**Misread:** . (decimal point)

**Field:** Amounts in Europe and other regions using decimal commas

**Rule:** Store a decimal separator setting per vendor or country

#### Thin stroke lost during binarization

**Printed:** - (hyphen)

**Misread:** _ or missing

**Field:** Part numbers, invoice numbers

**Rule:** Check pattern including separators

#### Thin diagonal stroke

**Printed:** / (slash)

**Misread:** 1 or l

**Field:** Dates, tax invoice numbers

**Rule:** Date pattern validation

#### Vertical line through symbol is lost

**Printed:** $ or other currency symbol

**Misread:** S or 5

**Field:** Amount lines

**Rule:** Match currency code to PO or vendor currency

#### Similar diagonal stroke

**Printed:** Z

**Misread:** 2

**Field:** Part numbers and codes

**Rule:** Pattern check per field

#### Rounded forms on faint print

**Printed:** D

**Misread:** O or 0

**Field:** Part numbers, codes

**Rule:** Lookup against master data

**Notes:** These are patterns seen across OCR engines, not engine specific. Which pairs matter most depends on font, scan quality and engine. Measure your own error confusion matrix on a sample of documents before writing correction rules.

## Content

**Intro:** OCR rarely fails randomly. It confuses the same look-alike characters again and again, and those mistakes land in the fields where they cost money: amounts, part numbers and invoice numbers. This list shows the pairs and the validation that catches each.

**Sections:**

#### How to use the list

**Body:** Search for the character or the field you are worried about, then apply the matching rule in your capture workflow. Treat the table as a starting list for an exception rule set, not as blanket find and replace. Blind replacement of O with 0 across a document damages names and descriptions, so apply corrections only to fields whose type you know to be numeric or pattern based.

#### Field type first, then correction

**Body:** The strongest defense is a typed field. If the invoice number field is known to be digits only, any O, l or I found in it is almost certainly a misread. If a field must match a master list, such as a part number or vendor ID, a lookup is better than a character rule because it rejects wrong values even when no look-alike is involved.

**Bullets:**

- Numeric fields: map look-alike letters to digits
- Master data fields: lookup and fuzzy match
- Dates: parse and range check
- Amounts: recompute from lines and compare
- Tax IDs: use the checksum for that country

#### Decimal and thousands separators

**Body:** The costliest confusion in AP is not a letter but a dot versus a comma. A value like 1.250 could be one thousand two hundred fifty or one point two five. Keep a decimal separator rule per vendor or country, and always compare the sum of recomputed line extensions to the stated total. A mismatch is a clean signal to send the document to human review.

#### Common mistakes

**Body:** Teams often try to fix quality problems with correction rules when the scan itself is the problem. Better resolution, deskew and contrast do more than rules. Another mistake is trusting engine confidence alone: a high confidence 8 that should be a B still passes. Combine confidence with validation against business data.

**Cta:** If you want checks like these run against your own vendor and part master data, Netray can build validation that works with your ERP, on your own infrastructure.

**Faq:**

#### Why does OCR confuse 0 and O?

**Answer:** The shapes are nearly identical in many fonts, and at low resolution the difference in width or a slash disappears. Engines use language models to guess, but part numbers and codes have no language context, so the guess is often wrong.

#### Should I auto-correct OCR output with replace rules?

**Answer:** Only on fields with a known type. Replacing O with 0 in a numeric invoice number is safe, while doing so across full text damages names. Prefer validation against master data and send failures to a person.

#### How can I detect a misread amount?

**Answer:** Recompute each line as quantity times unit price, sum the lines, add tax and freight, and compare to the printed total. Any difference beyond rounding signals a misread digit, a decimal separator error or a missed line.

#### Does a better OCR engine remove these errors?

**Answer:** It reduces them, but no engine removes them. Image quality, fonts and layout matter as much as the engine. Plan for validation and review as part of the process whatever engine you use.

## Search terms

ocr common errors 0 and o, ocr confusable characters, ocr misread characters list, ocr invoice number errors, ocr post correction rules, ocr 1 vs l vs i, ocr validation rules accounts payable

---
Talk to an engineer: https://netray.co/contact?intent=erp_ai | Machine catalog: https://netray.co/agent/catalog.json
