A bijective base64 encoder for creating short URLs.
Most encoders use decimal bases to convert characters. This can waste space by refusing to use the zero-value in the most significant position.
For example, in base10 the numbers 1, 01, 00001, are all equivalent despite being padded with leading 0's.
This is why non-bijective encoders will skip values such as A and AAA in favor of possibly longer strings.
By using these values we can recover 64(n-1) IDs of length n.
Length | Radix64 | Shortening | difference |
---|---|---|---|
1 | 63 | 64 | 1 |
2 | 4,032 | 4,096 | 64 |
3 | 258,048 | 262,144 | 4096 |
4 | 16,515,072 | 16,777,216 | 262,144 |
5 | 1,056,964,608 | 1,073,741,824 | 16,777,216 |
Benchmark | ns/op |
---|---|
Encode64 | 46.2 |
Decode64 | 21.6 |
Encode32 | 46.4 |
Decode32 | 23.7 |
- go1.12.4 darwin/amd64
- Intel Xeon X5675 - 3.06 GHz
Wikipedia: Bijective numeration