Base64: Difference between revisions

From Fracterebus
Jump to navigation Jump to search
No edit summary
No edit summary
 
(One intermediate revision by the same user not shown)
Line 139: Line 139:
* Don't use vowels of either case to prevent or at least greatly reduce accidental foul language in the codes.
* 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 \ 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.
* 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.
* Several lowercase letters are just smaller versions of the uppercase equivalent. Only keep uppercase for these.
** c and C
** c and C
Line 160: Line 160:
** I and 1
** I and 1
** O and 0
** O and 0
* Try to keep symbols similarly ordered to the way they are on a keyboard.
* 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.)