Base64: Difference between revisions

From Fracterebus
Jump to navigation Jump to search
No edit summary
No edit summary
 
(5 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. There are 64 characters in the alphabet, and each character represents 6-bits of data. This version of Base-64 uses all 10 numbers, a bunch of the lowercase consonants that don't visually clash with their uppercase version, uppercase consonants, and several symbols. When characters can visually conflict, only one option is kept. For example, with O (oh) and 0 (zero) it would be hard to tell the difference so only the 0 (zero) is used. Lowercase letters that look the same as their uppercase letter aren't used. Vowels are left out to prevent the creation of codes that have foul language in them.
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 9: Line 11:
|align="center"|m||align="center"|16||010000
|align="center"|m||align="center"|16||010000
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|M||align="center"|32||100000
|align="center"|N||align="center"|32||100000
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|$||align="center"|48||110000
|align="center"|^||align="center"|48||110000
|-
|-
|align="center"|1||align="center"|1||000001
|align="center"|1||align="center"|1||000001
Line 17: Line 19:
|align="center"|n||align="center"|17||010001
|align="center"|n||align="center"|17||010001
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|N||align="center"|33||100001
|align="center"|P||align="center"|33||100001
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|%||align="center"|49||110001
|align="center"|&||align="center"|49||110001
|-
|-
|align="center"|2||align="center"|2||000010
|align="center"|2||align="center"|2||000010
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|p||align="center"|18||010010
|align="center"|q||align="center"|18||010010
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|P||align="center"|34||100010
|align="center"|Q||align="center"|34||100010
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|^||align="center"|50||110010
|align="center"|*||align="center"|50||110010
|-
|-
|align="center"|3||align="center"|3||000011
|align="center"|3||align="center"|3||000011
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|q||align="center"|19||010011
|align="center"|r||align="center"|19||010011
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|Q||align="center"|35||100011
|align="center"|R||align="center"|35||100011
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|&||align="center"|51||110011
|align="center"|-||align="center"|51||110011
|-
|-
|align="center"|4||align="center"|4||000100
|align="center"|4||align="center"|4||000100
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|r||align="center"|20||010100
|align="center"|t||align="center"|20||010100
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|R||align="center"|36||100100
|align="center"|S||align="center"|36||100100
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|*||align="center"|52||110100
|align="center"|+||align="center"|52||110100
|-
|-
|align="center"|5||align="center"|5||000101
|align="center"|5||align="center"|5||000101
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|t||align="center"|21||010101
|align="center"|y||align="center"|21||010101
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|S||align="center"|37||100101
|align="center"|T||align="center"|37||100101
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|-||align="center"|53||110101
|align="center"|=||align="center"|53||110101
|-
|-
|align="center"|6||align="center"|6||000110
|align="center"|6||align="center"|6||000110
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|y||align="center"|22||010110
|align="center"|B||align="center"|22||010110
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|T||align="center"|38||100110
|align="center"|V||align="center"|38||100110
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|+||align="center"|54||110110
|align="center"|:||align="center"|54||110110
|-
|-
|align="center"|7||align="center"|7||000111
|align="center"|7||align="center"|7||000111
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|B||align="center"|23||010111
|align="center"|C||align="center"|23||010111
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|V||align="center"|39||100111
|align="center"|W||align="center"|39||100111
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|=||align="center"|55||110111
|align="center"|.||align="center"|55||110111
|-
|-
|align="center"|8||align="center"|8||001000
|align="center"|8||align="center"|8||001000
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|C||align="center"|24||011000
|align="center"|D||align="center"|24||011000
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|W||align="center"|40||101000
|align="center"|X||align="center"|40||101000
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|:||align="center"|56||111000
|align="center"|/||align="center"|56||111000
|-
|-
|align="center"|9||align="center"|9||001001
|align="center"|9||align="center"|9||001001
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|D||align="center"|25||011001
|align="center"|F||align="center"|25||011001
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|X||align="center"|41||101001
|align="center"|Y||align="center"|41||101001
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|.||align="center"|57||111001
|align="center"|?||align="center"|57||111001
|-
|-
|align="center"|b||align="center"|10||001010
|align="center"|b||align="center"|10||001010
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|F||align="center"|26||011010
|align="center"|G||align="center"|26||011010
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|Y||align="center"|42||101010
|align="center"|~||align="center"|42||101010
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|?||align="center"|58||111010
|align="center"|{||align="center"|58||111010
|-
|-
|align="center"|d||align="center"|11||001011
|align="center"|d||align="center"|11||001011
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|G||align="center"|27||011011
|align="center"|H||align="center"|27||011011
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|Z||align="center"|43||101011
|align="center"|!||align="center"|43||101011
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|<||align="center"|59||111011
|align="center"|}||align="center"|59||111011
|-
|-
|align="center"|f||align="center"|12||001100
|align="center"|f||align="center"|12||001100
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|H||align="center"|28||011100
|align="center"|J||align="center"|28||011100
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|~||align="center"|44||101100
|align="center"|@||align="center"|44||101100
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|>||align="center"|60||111100
|align="center"|<||align="center"|60||111100
|-
|-
|align="center"|g||align="center"|13||001101
|align="center"|g||align="center"|13||001101
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|J||align="center"|29||011101
|align="center"|K||align="center"|29||011101
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|!||align="center"|45||101101
|align="center"|#||align="center"|45||101101
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|;||align="center"|61||111101
|align="center"|>||align="center"|61||111101
|-
|-
|align="center"|h||align="center"|14||001110
|align="center"|h||align="center"|14||001110
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|K||align="center"|30||011110
|align="center"|L||align="center"|30||011110
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|@||align="center"|46||101110
|align="center"|$||align="center"|46||101110
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|[||align="center"|62||111110
|align="center"|[||align="center"|62||111110
Line 127: Line 129:
|align="center"|j||align="center"|15||001111
|align="center"|j||align="center"|15||001111
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|L||align="center"|31||011111
|align="center"|M||align="center"|31||011111
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|#||align="center"|47||101111
|align="center"|%||align="center"|47||101111
|bgcolor="#eaecf0"|
|bgcolor="#eaecf0"|
|align="center"|]||align="center"|63||111111
|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.

Legend
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.)