This is a simple Rust library to convert an index to a name that is as short as possible.
It can convert from index to string and back, for different character sets.
From number to text:
let charset = Charset::case_insensitive("abc");
let text = charset.encode(13);
assert_eq!(text, "aab");
From text to number:
let nr = charset.decode("aab")?;
assert_eq!(nr, 13);
Cargo.toml
:
number2name = "^1.0.0"
For a character set 'abc', the series is::
0 a
1 b
2 c
3 aa
4 ab
...
10 cb
11 cc
12 aaa
13 aab
Note that this is slightly shorter than base3 with leading characters stripped::
0 a (or '')
1 b
2 c
3 ba
4 bb
...
11 bac
12 bba
13 bbb
14 bbc
You can easily use your own character sets using number2name::Charset
.
Or use one of the built-in ones:
HEX (case-insensitive) / HEXLOWERCASE (case-sensitive)
0123456789abcdef
BASE32 (case-insensitive) / BASE32LOWERCASE (case-sensitive)
ABCDEFGHIJKLMNOPQRSTUVWXYZ234567
BASE32HUMAN
abcdefghjkmnpqrstuvwxyz23456789
BASE32CROCKFORD
0123456789ABCDEFGHJKMNPQRSTVWXYZ
BASE32SCNY
一二三四五六七八九十鼠牛虎兔龍蛇马羊猴鸡狗猪凤北东南西中左右上下
BASE32HEX
0123456789ABCDEFGHIJKLMNOPQRSTUV
BASE64 (case-sensitive)
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
BASE64URL (case-sensitive)
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_
It's generally pretty fast, but if performance is critical: