ISBT 128 donation numbers utilise check characters based on the ISO 7064 modulus 37,2 algorithm. This Annex shows how to calculate the check character for a given number. The calculation is based on the donation number string excluding the leading ‘=‘ symbol and the flag characters.
The steps in the process are as follows:
The calculated checksum is used to generate both the barcode check characters used in the flag positions of the ISBT 128 barcode and the eye-readable check character. The barcode check characters are determined by adding 60 to the checksum. The eye-readable check character is determined by cross-referencing the checksum to Table A2.1.
Table A2.1 Mapping from characters to ISO 7064 check values
| Char | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D |
| Value | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| Char | E | F | G | H | I | J | K | L | M | N | O | P | Q | R |
| Value | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| Char | S | T | U | V | W | X | Y | Z | * | |||||
| Value | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | |||||
Table A2.2 Example of displayed numbers
| Donation number | G123 498 654 321 | |||
| Character | ISO7064 value (step 1) | Position from right (n) | 2n | Weighted value (step 2) |
| G | 16 | 13 | 8192 | 131072 |
| 1 | 1 | 12 | 4096 | 4096 |
| 2 | 2 | 11 | 2048 | 4096 |
| 3 | 3 | 10 | 1024 | 3072 |
| 4 | 4 | 9 | 512 | 2048 |
| 9 | 9 | 8 | 256 | 2304 |
| 8 | 8 | 7 | 128 | 1024 |
| 6 | 6 | 6 | 64 | 384 |
| 5 | 5 | 5 | 32 | 160 |
| 4 | 4 | 4 | 16 | 64 |
| 3 | 3 | 3 | 8 | 24 |
| 2 | 2 | 2 | 4 | 8 |
| 1 | 1 | 1 | 2 | 2 |
| Sum of weighted values (step 3) | 148354 | |||
| Modulus 37 of sum of weighted values (step 4) | 21 | |||
| Subtract from 38 (step 5) | 17 | |||
| Modulus 37 of result (step 6) | 17 | |||
| ISO 37,2 checksum | 17 | |||
| ISBT128 barcode check character | 77 | |||
| ISBT128 eye-readable check | H | |||