Base64: Difference between revisions
Jump to navigation
Jump to search
NerdOfEpic (talk | contribs) No edit summary |
NerdOfEpic (talk | contribs) No edit summary |
||
| (6 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
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 Code|Seed Codes]] but each character holds an extra bit of information. | 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 Code|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. | |||
{| class="wikitable" | {| class="wikitable" | ||
| Line 5: | Line 7: | ||
!Base64!!Integer!!Bits!!!!Base64!!Integer!!Bits!!!!Base64!!Integer!!Bits!!!!Base64!!Integer!!Bits | !Base64!!Integer!!Bits!!!!Base64!!Integer!!Bits!!!!Base64!!Integer!!Bits!!!!Base64!!Integer!!Bits | ||
|- | |- | ||
|align="center"|0||align="center"|0||000000|| | |align="center"|0||align="center"|0||000000 | ||
|bgcolor="#eaecf0"| | |||
|align="center"|m||align="center"|16||010000 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|N||align="center"|32||100000 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|^||align="center"|48||110000 | |||
|- | |- | ||
|align="center"|1||align="center"|1||000001|| | |align="center"|1||align="center"|1||000001 | ||
|bgcolor="#eaecf0"| | |||
|align="center"|n||align="center"|17||010001 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|P||align="center"|33||100001 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|&||align="center"|49||110001 | |||
|- | |- | ||
|align="center"|2||align="center"|2||000010|| | |align="center"|2||align="center"|2||000010 | ||
|bgcolor="#eaecf0"| | |||
|align="center"|q||align="center"|18||010010 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|Q||align="center"|34||100010 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|*||align="center"|50||110010 | |||
|- | |- | ||
|align="center"|3||align="center"|3||000011|| | |align="center"|3||align="center"|3||000011 | ||
|bgcolor="#eaecf0"| | |||
|align="center"|r||align="center"|19||010011 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|R||align="center"|35||100011 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|-||align="center"|51||110011 | |||
|- | |- | ||
|align="center"|4||align="center"|4||000100|| | |align="center"|4||align="center"|4||000100 | ||
|bgcolor="#eaecf0"| | |||
|align="center"|t||align="center"|20||010100 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|S||align="center"|36||100100 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|+||align="center"|52||110100 | |||
|- | |- | ||
|align="center"|5||align="center"|5||000101|| | |align="center"|5||align="center"|5||000101 | ||
|bgcolor="#eaecf0"| | |||
|align="center"|y||align="center"|21||010101 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|T||align="center"|37||100101 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|=||align="center"|53||110101 | |||
|- | |- | ||
|align="center"|6||align="center"|6||000110|| | |align="center"|6||align="center"|6||000110 | ||
|bgcolor="#eaecf0"| | |||
|align="center"|B||align="center"|22||010110 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|V||align="center"|38||100110 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|:||align="center"|54||110110 | |||
|- | |- | ||
|align="center"|7||align="center"|7||000111|| | |align="center"|7||align="center"|7||000111 | ||
|bgcolor="#eaecf0"| | |||
|align="center"|C||align="center"|23||010111 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|W||align="center"|39||100111 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|.||align="center"|55||110111 | |||
|- | |- | ||
|align="center"|8||align="center"|8||001000|| | |align="center"|8||align="center"|8||001000 | ||
|bgcolor="#eaecf0"| | |||
|align="center"|D||align="center"|24||011000 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|X||align="center"|40||101000 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|/||align="center"|56||111000 | |||
|- | |- | ||
|align="center"|9||align="center"|9||001001|| | |align="center"|9||align="center"|9||001001 | ||
|bgcolor="#eaecf0"| | |||
|align="center"|F||align="center"|25||011001 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|Y||align="center"|41||101001 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|?||align="center"|57||111001 | |||
|- | |- | ||
|align="center"|b||align="center"|10||001010|| | |align="center"|b||align="center"|10||001010 | ||
|bgcolor="#eaecf0"| | |||
|align="center"|G||align="center"|26||011010 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|~||align="center"|42||101010 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|{||align="center"|58||111010 | |||
|- | |- | ||
|align="center"|d||align="center"|11||001011|| | |align="center"|d||align="center"|11||001011 | ||
|bgcolor="#eaecf0"| | |||
|align="center"|H||align="center"|27||011011 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|!||align="center"|43||101011 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|}||align="center"|59||111011 | |||
|- | |- | ||
|align="center"|f||align="center"|12||001100|| | |align="center"|f||align="center"|12||001100 | ||
|bgcolor="#eaecf0"| | |||
|align="center"|J||align="center"|28||011100 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|@||align="center"|44||101100 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|<||align="center"|60||111100 | |||
|- | |- | ||
|align="center"|g||align="center"|13||001101|| | |align="center"|g||align="center"|13||001101 | ||
|bgcolor="#eaecf0"| | |||
|align="center"|K||align="center"|29||011101 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|#||align="center"|45||101101 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|>||align="center"|61||111101 | |||
|- | |- | ||
|align="center"|h||align="center"|14||001110|| | |align="center"|h||align="center"|14||001110 | ||
|bgcolor="#eaecf0"| | |||
|align="center"|L||align="center"|30||011110 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|$||align="center"|46||101110 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|[||align="center"|62||111110 | |||
|- | |- | ||
|align="center"|j||align="center"|15||001111|| | |align="center"|j||align="center"|15||001111 | ||
|bgcolor="#eaecf0"| | |||
|align="center"|M||align="center"|31||011111 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|%||align="center"|47||101111 | |||
|bgcolor="#eaecf0"| | |||
|align="center"|]||align="center"|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 US QWERTY keyboard. (Sorry if they end up all over the place for other keyboard layouts.) | |||
Latest revision as of 18:38, 14 April 2026
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 US QWERTY keyboard. (Sorry if they end up all over the place for other keyboard layouts.)