我正在生成一个参考号,这是一个用户输入的号码。它可以是大约30位数。
我正在寻找缩短用户输入值的方法,但我需要能够将其转换回原始数字。
目前base36转
999999999999999999999999999999 (30 digits)
2OY99WNKL1A848GWKS0G (20 characters)
Id'可能会将此连结到2OY99-WNKL1-A848G-WKS0G
答案 0 :(得分:2)
假设您正在查看整数作为输入,您显然可以更改为基数36(10 alpha + 26 chars),为您提供结果。
除此之外,您可以允许上/下,将基数扩大到10 + 52。
如果你允许所有的ascii(可能不是很漂亮,但应该可以工作),你可能会使用256,所以你可能会减少到15左右。
我可能会考虑选择100个我很满意的字符,只需将每2个数字转换成该范围内的字符。
这里有一些linqpad代码会吐出144个可打印(ish)字符:
Array values = Enum.GetValues(typeof(ConsoleKey));//.Dump("all values");
var val_list = values.Cast<ConsoleKey>();
var verbose = from value in val_list
select new {IntVal = (int) value,
IntValPrintsAs = (char)value,
Value=((ConsoleKey) value),
Straight = value
};
verbose.Dump();
如果你忽略了一些像backspace那样明显的东西,它可能会给你一个方向:)