Base64
Verify Codes use Base-64 to represent information in a way that doesn't require a ton of characters and is easy to write down. This is a lot like the Base-32 code format for Seed Codes but each character holds an extra bit of information. That increases the number of characters required from 32 to 64.
This set was crafted to be as visually distinct as possible. It was also designed to produce the least confusion for hand written codes. See below the table for some of the logic behind the choices.
| Base64 | Integer | Bits | Base64 | Integer | Bits | Base64 | Integer | Bits | Base64 | Integer | Bits | |||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 000000 | m | 16 | 010000 | N | 32 | 100000 | ^ | 48 | 110000 | |||
| 1 | 1 | 000001 | n | 17 | 010001 | P | 33 | 100001 | & | 49 | 110001 | |||
| 2 | 2 | 000010 | q | 18 | 010010 | Q | 34 | 100010 | * | 50 | 110010 | |||
| 3 | 3 | 000011 | r | 19 | 010011 | R | 35 | 100011 | - | 51 | 110011 | |||
| 4 | 4 | 000100 | t | 20 | 010100 | S | 36 | 100100 | + | 52 | 110100 | |||
| 5 | 5 | 000101 | y | 21 | 010101 | T | 37 | 100101 | = | 53 | 110101 | |||
| 6 | 6 | 000110 | B | 22 | 010110 | V | 38 | 100110 | : | 54 | 110110 | |||
| 7 | 7 | 000111 | C | 23 | 010111 | W | 39 | 100111 | . | 55 | 110111 | |||
| 8 | 8 | 001000 | D | 24 | 011000 | X | 40 | 101000 | / | 56 | 111000 | |||
| 9 | 9 | 001001 | F | 25 | 011001 | Y | 41 | 101001 | ? | 57 | 111001 | |||
| b | 10 | 001010 | G | 26 | 011010 | ~ | 42 | 101010 | { | 58 | 111010 | |||
| d | 11 | 001011 | H | 27 | 011011 | ! | 43 | 101011 | } | 59 | 111011 | |||
| f | 12 | 001100 | J | 28 | 011100 | @ | 44 | 101100 | < | 60 | 111100 | |||
| g | 13 | 001101 | K | 29 | 011101 | # | 45 | 101101 | > | 61 | 111101 | |||
| h | 14 | 001110 | L | 30 | 011110 | $ | 46 | 101110 | [ | 62 | 111110 | |||
| j | 15 | 001111 | M | 31 | 011111 | % | 47 | 101111 | ] | 63 | 111111 |
Logic
- Don't use vowels of either case to prevent or at least greatly reduce accidental foul language in the codes.
- Don't use \ or " because they require escaping when used in program code or data transmission formats.
- Don't use BOTH ( ) and { } because they can be confused visually or with poor handwriting.
- Several lowercase letters are just smaller versions of the uppercase equivalent. Only keep uppercase for these.
- c and C
- k and K
- p and P
- s and S
- v and V
- w and W
- x and X
- z and Z
- Don't use things that are visually similar.
- l because we use 1
- _ because we use -
- , because we use .
- ; because we use :
- | because we use 1
- Z because we use 2
- ( because we use C
- Because we already don't have vowels we dodge problems with similarities between
- I and 1
- O and 0
- Try to keep symbols similarly ordered to the way they are on a keyboard.