自动增加字母/数字,如INT

时间:2013-02-26 12:11:42

标签: php mysql auto-increment

我需要一个函数来为数据库的每个输入增加“LETTER / NUMBER”。 就像AI for INT数据一样。

我需要这样做一个短链接代码,例如site.com/1gHrT

任何想法如何制作?

4 个答案:

答案 0 :(得分:1)

URL缩短程序通常在base62中使用大整数。

整数通常在base10(这是十进制系统的另一个词,即[0-9])。还有其他常见系统,例如base2([0-1]),base8([0-8])和base16([0-f])。

当你超过base10时,习惯上使用英文小写字母([a-z])。因此,base16为[0-9a-f]0123456789abcdef)。如果您将基数推到数字和小写字母可以处理的范围之外,那么通常使用大写字母([A-Z])。因此,base62使用[0-9a-zA-Z]

在PHP中,base_convert()函数可以处理从base2到base36(或[0-1][0-9a-z])的任何内容。

如果您想要超越base36,那么您需要gmp扩展名为can handle anything up to base62。如果您没有安装gmp扩展程序,那么您应该可以在互联网上find a function somewhere。此外,虽然base64_encode()函数可能听起来相关,但在这种情况下它不是。它对数据进行编码,这与更改基数(或radix)不同。

但是,您需要记住,base62在网络上可能有点脆弱。这是因为小写和大写字母都有重要意义。换句话说,如果一些聪明人或者gal喜欢小写URI,并将其转换为小写,那么URI将指向错误的位置。在这个意义上,base36更安全,但URI不会那么短(虽然不是那么多)。

现在,如果您想增加帖子中的数字,那么只需将其转换为base10,增加它,然后将其转换回来。

如果我们假设它确实在base62中,那么我们可以使用gmp函数:

function base62_increment($number, $incrBy = 1) {
    if ( ! defined('GMP_VERSION'))
        throw new \Exception(__FUNCTION__.' needs the GMP extension');
    $number = gmp_init($number, 62);
    $number = gmp_add($number, $incrBy);
    return gmp_strval($number, 62);
}
$base62 = '1gHrT';
$incremented = base62_increment($base62);
var_dump($base62, $incremented);

如果您想使用base36,或者如果您没有安装gmp扩展程序,那么我们可以使用base_convert()

function base36_increment($number, $incrBy = 1) {
    $number = base_convert($number, 36, 10);
    $number += $incrBy;
    return base_convert($number, 10, 36);
}
$base36 = 'esq2f';
$incremented = base36_increment($base36);
var_dump($base36, $incremented);

就是这样。

答案 1 :(得分:0)

也许你是在追求类似的东西?

function randLetter()
{
return chr(97 + mt_rand(0, 25));
}

来源:http://maymay.net/blog/2004/12/19/generating-random-letters-in-php/

答案 2 :(得分:0)

您可以使用给定的字符将数字转换为字符串,就像您将一个系统中的数字转换为另一个系统一样,具有以下算法

$n = 123; //your number

$chars = "abcdefghijklmnopqrstuvwxyz";
$chars = "0123456789" . strtoupper($chars) . $chars;
$b = strlen($chars);
$nums = array();
while ($n > 0) {
    $nums[] = $n % $b;
    $n = (int)($n / $b);
}

$nums = array_reverse($nums);
$out = "";
foreach ($nums as $num) {
    $out .= $chars[$num];
}

在内部,您可以使用数字计数器,并使用此算法生成输出..

答案 3 :(得分:0)

未经测试且可能已经过优化以避免转换,但这会将数字转换为数字,但这会将连续的ints转换为字符串。

$startval = 12435;
$maxval = 12654;

for ($i = $startval; $i < maxval; $i++) {
    $strINT = strval($i); // convert int to string
    // intialize final string to empty
    $strOutput = '';
    /* Loop through each letter */
    foreach (explode($strINT) as $letter) {
        // add 65 to each letter and turn it into a letter
        // letter A is character 65
        $strOutput .= chr(intval($letter) + 65);
    }
}
相关问题