将数字转换为较短的Alpha数字。比Base36好吗?

时间:2014-08-15 08:26:40

标签: c# encode serial-number

我正在生成一个参考号,这是一个用户输入的号码。它可以是大约30位数。

我正在寻找缩短用户输入值的方法,但我需要能够将其转换回原始数字。

目前base36转

999999999999999999999999999999 (30 digits)
2OY99WNKL1A848GWKS0G (20 characters)

Id'可能会将此连结到2OY99-WNKL1-A848G-WKS0G

1 个答案:

答案 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那样明显的东西,它可能会给你一个方向:)