【问题标题】:Auto incrementing alphanumeric sequence自动递增字母数字序列
【发布时间】:2017-04-11 21:32:41
【问题描述】:

需要用于生成字母数字序列的算法指针。要求如下。

只能使用 0-9、A-Z 和 a-z 字符。最初,序列将仅从一个字符开始,当序列用尽时,它将转到两个字符,同样,当前一个序列用尽时,序列将递增。

序列示例如下

一个字符序列

0 1 2 .. 9 A B .. Z a b .. z

现在一个字符序列已经用完了。然后将开始一个 2 位数的系列。

00 01 02 .. 09 0A 0B .. 0Z 0a 0b .. 0z 10 11 .. 19 1A .. 1Z 1a 1b .. zz

在用完两个字符系列后,将开始三个字符系列,如下所示

000 ... zzz

并且该系列将一直生成到 12 个字符系列用完为止。

谁能帮我指出一些链接或建议我这样做的机制?

我正在尝试在 PHP 中执行此操作。

谢谢

【问题讨论】:

  • @nogad.. 如果您阅读了描述,我不会要求任何人为我编写代码。我在问是否有人可以指出我的方向或给我一些建议。如果你像我一样不知道,就不用说负面的话。
  • 我在这里发现了一个非常相似的问题:stackoverflow.com/questions/4964197/…
  • 我建议阅读How to Ask 一个好问题和the perfect question。另外,请务必使用tour
  • @nomad: 类似地,我建议你也阅读这个页面 [link]stackoverflow.com/help/how-to-answer
  • @maraca:是的。我确实意识到了这一点,但这需要一段时间。这个字母数字序列将用于 URL 缩短网站,我们希望有一些灵活性来增加长度,而无需在每次序列耗尽时重新处理逻辑。

标签: php mysql algorithm


【解决方案1】:

Python:

digits="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"

def NthStr(n):
    str=digits[n%len(digits)];
    while n>=len(digits):
        n=(n/len(digits) - 1)
        str=digits[n%len(digits)]+str
    return str

试试看(用更少的数字,所以你可以看到模式):https://ideone.com/rZEV1m

我想这很容易翻译成 PHP

【讨论】:

  • 完美。这就是我要找的。谢谢
【解决方案2】:

下面给出的是 Matt 的 Python 代码的 PHP 实现。

以下字符已从实施中删除 0,o,O,1,i,I

<?php
function GenerateShortCodes($n)
{
    $alphabet=array('A','B','C','D','E','F','G','H','J','K','L','M','N','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','j','k','m','n','o','p','q','r','s','t','u','v','w','x','y','z','2','3','4','5','6','7','8','9');
    $len=56;
    $ns=$alphabet[$n%$len];
    while ($n>=$len)
    {
       $n=($n/$len-1);
       $ns=$alphabet[$n%$len].$ns;
    }
    return $ns;
}
$startval=0;

for( $i = $startval; $i<$startval+10000; $i++ ) 
{
    echo GenerateShortCodes($i);
    echo '</br>';
}
?>

【讨论】:

    猜你喜欢
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    相关资源
    最近更新 更多