Now, doesn’t that just sound sexy? No, not really. I hear you.
Alas, I went and built it anyway.
nuget.org/List/Packages/crockford-base32
Crockford Base32 lets you encode a number into an alphanumeric string, and back again.
Where it shines is in the character set it uses.
It’s resilient to humans:
- No crazy characters or keyboard gymnastics
- Totally case insensitive
- 0, O and o all decode to the same thing
- 1, I, i, L and l all decode to the same thing
- Doesn’t use U, so a number like 519,571 encodes to FVCK instead
- Optional check digit on the end
It’s great for URLs:
- No funky characters that require special encoding
- No plus, slash or equals symbols like base 64
It handles really big numbers. (Well, my implementation is limited to 18,446,744,073,709,551,615 but you could extend the algorithm even further just by changing the data type from ulong to something even bigger.)
Number | Encoded | Encoded with optional check digit |
1 | 1 | 11 |
194 | 62 | 629 |
456,789 | 1CKE | 1CKEM |
398,373 | C515 | C515Z |
3,838,385,658,376,483 | 3D2ZQ6TVC93 | 3D2ZQ6TVC935 |
18,446,744,073,709,551,615 | FZZZZZZZZZZZZ | FZZZZZZZZZZZZB |
Don’t have too much fun now.
Would it be possible to double check the encoded value for 456,789? I’m working on implementing this algorithm and I’m getting the same values for 1, 194, 398373, 519571, and 3838385658376483 but the encoded value I get for 456789 is different. Either there is something wrong with my implementation or the information here is incorrect and I’m trying to figure out which. 🙂