# QR error correction capacity table — data vs EC codewords

> Every QR version has a fixed codeword budget split between data and error correction. Version 1 has 26 codewords, 19 data and 7 error correction at level L, but 9 and 17 at level H. Version 40 ranges from 2,956 data codewords at L to 1,276 at H. The table lists all forty versions.

Source: https://useqr.app/docs/reference/error-correction-capacity-table · Last reviewed 2026-08-21 · UseQR is free forever, MIT licensed, no signup.

---

## How to read the table

A [codeword](/glossary/codeword) is 8 bits. Each version has a **fixed total** — version 1
always carries 26 codewords, version 40 always 3,706 — and the
[error-correction level](/docs/spec/error-correction-levels-explained) decides how that total
is split between data and [Reed–Solomon](/glossary/reed-solomon) redundancy. Cells below are
**data / EC**.

These values were extracted from the RS block table of the encoder UseQR itself uses, which
implements the error-correction characteristics table of ISO/IEC 18004 — they are pulled from
running code, not transcribed from a blog.

## All forty versions

| Version | Total | L (data / EC) | M (data / EC) | Q (data / EC) | H (data / EC) |
|---|---|---|---|---|---|
| 1 | 26 | 19 / 7 | 16 / 10 | 13 / 13 | 9 / 17 |
| 2 | 44 | 34 / 10 | 28 / 16 | 22 / 22 | 16 / 28 |
| 3 | 70 | 55 / 15 | 44 / 26 | 34 / 36 | 26 / 44 |
| 4 | 100 | 80 / 20 | 64 / 36 | 48 / 52 | 36 / 64 |
| 5 | 134 | 108 / 26 | 86 / 48 | 62 / 72 | 46 / 88 |
| 6 | 172 | 136 / 36 | 108 / 64 | 76 / 96 | 60 / 112 |
| 7 | 196 | 156 / 40 | 124 / 72 | 88 / 108 | 66 / 130 |
| 8 | 242 | 194 / 48 | 154 / 88 | 110 / 132 | 86 / 156 |
| 9 | 292 | 232 / 60 | 182 / 110 | 132 / 160 | 100 / 192 |
| 10 | 346 | 274 / 72 | 216 / 130 | 154 / 192 | 122 / 224 |
| 11 | 404 | 324 / 80 | 254 / 150 | 180 / 224 | 140 / 264 |
| 12 | 466 | 370 / 96 | 290 / 176 | 206 / 260 | 158 / 308 |
| 13 | 532 | 428 / 104 | 334 / 198 | 244 / 288 | 180 / 352 |
| 14 | 581 | 461 / 120 | 365 / 216 | 261 / 320 | 197 / 384 |
| 15 | 655 | 523 / 132 | 415 / 240 | 295 / 360 | 223 / 432 |
| 16 | 733 | 589 / 144 | 453 / 280 | 325 / 408 | 253 / 480 |
| 17 | 815 | 647 / 168 | 507 / 308 | 367 / 448 | 283 / 532 |
| 18 | 901 | 721 / 180 | 563 / 338 | 397 / 504 | 313 / 588 |
| 19 | 991 | 795 / 196 | 627 / 364 | 445 / 546 | 341 / 650 |
| 20 | 1085 | 861 / 224 | 669 / 416 | 485 / 600 | 385 / 700 |
| 21 | 1156 | 932 / 224 | 714 / 442 | 512 / 644 | 406 / 750 |
| 22 | 1258 | 1006 / 252 | 782 / 476 | 568 / 690 | 442 / 816 |
| 23 | 1364 | 1094 / 270 | 860 / 504 | 614 / 750 | 464 / 900 |
| 24 | 1474 | 1174 / 300 | 914 / 560 | 664 / 810 | 514 / 960 |
| 25 | 1588 | 1276 / 312 | 1000 / 588 | 718 / 870 | 538 / 1050 |
| 26 | 1706 | 1370 / 336 | 1062 / 644 | 754 / 952 | 596 / 1110 |
| 27 | 1828 | 1468 / 360 | 1128 / 700 | 808 / 1020 | 628 / 1200 |
| 28 | 1921 | 1531 / 390 | 1193 / 728 | 871 / 1050 | 661 / 1260 |
| 29 | 2051 | 1631 / 420 | 1267 / 784 | 911 / 1140 | 701 / 1350 |
| 30 | 2185 | 1735 / 450 | 1373 / 812 | 985 / 1200 | 745 / 1440 |
| 31 | 2323 | 1843 / 480 | 1455 / 868 | 1033 / 1290 | 793 / 1530 |
| 32 | 2465 | 1955 / 510 | 1541 / 924 | 1115 / 1350 | 845 / 1620 |
| 33 | 2611 | 2071 / 540 | 1631 / 980 | 1171 / 1440 | 901 / 1710 |
| 34 | 2761 | 2191 / 570 | 1725 / 1036 | 1231 / 1530 | 961 / 1800 |
| 35 | 2876 | 2306 / 570 | 1812 / 1064 | 1286 / 1590 | 986 / 1890 |
| 36 | 3034 | 2434 / 600 | 1914 / 1120 | 1354 / 1680 | 1054 / 1980 |
| 37 | 3196 | 2566 / 630 | 1992 / 1204 | 1426 / 1770 | 1096 / 2100 |
| 38 | 3362 | 2702 / 660 | 2102 / 1260 | 1502 / 1860 | 1142 / 2220 |
| 39 | 3532 | 2812 / 720 | 2216 / 1316 | 1582 / 1950 | 1222 / 2310 |
| 40 | 3706 | 2956 / 750 | 2334 / 1372 | 1666 / 2040 | 1276 / 2430 |

## What each level recovers

| Level | Nominal recovery | EC share of the symbol |
|---|---|---|
| L | ~7% | 19–27% |
| M | ~15% | 36–39% |
| Q | ~25% | 50–56% |
| H | ~30% | 63–66% |

The EC share is roughly **twice** the recovery rate because Reed–Solomon spends two EC
codewords to fix each codeword whose location is unknown, and one for an *erasure* whose
location is known. At level H nearly two-thirds of the printed pattern is redundancy.

The smallest versions recover slightly less than the arithmetic suggests: version 1 at
level L has 7 EC codewords but corrects only **2** codeword errors, because 3 of those 7
are reserved for misdecode protection rather than correction.

## Blocks, not one big calculation

From version 3 upward the data is split into multiple Reed–Solomon blocks that are error
corrected independently and then [interleaved](/glossary/interleaving). Version 40 at level
H uses **81 blocks** of 45–46 codewords each; version 1 is always a single block. Damage
concentrated in one block can defeat a code even when the total damage is under the nominal
percentage.

## Turning codewords into characters

Multiply data codewords by 8 bits, subtract the 4-bit mode indicator and the character count
indicator, and divide by the bits per character for the mode. That derivation is already done
for you in the [capacity table](/docs/reference/qr-code-capacity-table) — version 40-L's
2,956 data codewords are exactly where the famous 7,089-digit ceiling comes from. To check a
real payload rather than the theory, [decode the rendered output](/validate).

## FAQ

### How many error correction codewords does a QR code have?
It depends on version and level: from 7 (version 1, level L) to 2,430 (version 40, level H). The total codeword count is fixed per version; the level only changes the data/EC split.

### What percentage of a QR code is error correction?
Roughly 19–27% of codewords at level L, 36–39% at M, 50–56% at Q and 63–66% at H. That is about double the recovery rate, since fixing one unknown error costs two EC codewords.

### Why does level H only recover 30% when 65% of the code is redundancy?
Reed–Solomon needs two redundant codewords per corrupted codeword when it does not know which ones are wrong. Only known-location erasures are corrected one-for-one.

### Are these numbers from the QR specification?
Yes. They match the error-correction characteristics table in ISO/IEC 18004, and were extracted from the RS block table of the working encoder UseQR uses rather than copied from secondary sources.

## Try it

- https://useqr.app/validate
- https://useqr.app/size-calculator
- https://useqr.app/url
