【问题标题】:Algorithm to convert int to 6 character alphanumeric string将 int 转换为 6 个字符的字母数字字符串的算法
【发布时间】:2012-12-04 23:46:04
【问题描述】:

我有一个 ID 字段,在添加新记录时会自动递增 1。我不想按原样使用数字 ID,而是将其转换为由 0-9A-Z(无小写字母)组成的 6 个字符串,格式如下:

A00000

数字应该从 0-9 递增,然后是 A-Z。

示例

例如,如果我要编码数字7,它应该返回:

A00007

如果我对数字 13 进行编码,它应该返回:

A0000D

如果我对数字 36 进行编码,它应该返回:

A00010

希望这是有道理的。任何帮助将不胜感激。

【问题讨论】:

  • 所以基本上它是一个基数为 36 的数字?
  • @phoog 我幸运地尝试了一些 base 36 编码,但我很想知道是否有更好的解决方案。是的,那应该是 36。错字已修复。
  • 我写了一些代码来回答stackoverflow.com/questions/8885582/…
  • @SystemDown 基本上,是的。
  • 建议:将 604661760 添加到整数值(= 10 * 36 ^ 5 ),然后以 36 为基数编码。

标签: c# algorithm int


【解决方案1】:

建议:在整数值上加上 604661760。这是A00000 的基数为 10 的值,解释为基数为 36 的数字 ( = 10 * 36 ^ 5 )。

然后将结果编码为 base 36。

根据您的数据范围,您可能希望在添加 604661760 之前将 int 提升为 long

【讨论】:

  • intlong 建议的好主意。再次感谢。
【解决方案2】:

您在这里所做的是从以 10 为底的数字到以 36 为底的数字的转换。这是一个从 10 到 K 的转换算法。修改它以满足您的需要:

http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/toBaseK.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 2015-12-15
    • 2020-08-06
    • 1970-01-01
    相关资源
    最近更新 更多