【问题标题】:php string generating by custom number自定义数字生成的php字符串
【发布时间】:2016-04-05 10:36:59
【问题描述】:

我找到了一个可以用 PHP 制作随机字符串生成器的代码:

function generateRandomString($length = 10) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyz';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}

但我想将我的numeric ID 散列为散列字符串

例如,我的整数 id 是 118,所以我的哈希必须是 1a

我的 $chatresters 是 36 个单词和数字,所以我的 ID 中的每 36 个倍数 hash 中的一个新字符

ID  HASH
36  z
38  0b
107 0z
118 1a

【问题讨论】:

  • 您的“数字 ID”是否适合 php 整数?
  • 是的,ID = int@VolkerK

标签: php string hash numbers generator


【解决方案1】:
<?php
function base($int, array $digits) {
    $rv = ''; $int = (int)$int;
    while($int) {
        $rv = $digits[ $int%count($digits) ] . $rv;
        $int = (int)($int/count($digits)); // use %% for php7+
    }
    return $rv;
}

function base36($int) {
    static $digits = array('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
    return base($int, $digits);
}

foreach( array(35, 36,38,107,118) as $i ) {
    echo base36($i), "\r\n";
}

打印

10
12
2z
3a

a) 这不是哈希;它只是使用基数的数字的另一种表示形式!=10
b)我认为您在示例中忘记了零;-)

【讨论】:

    【解决方案2】:

    Hashids 是一个小型开源库,可从数字生成短的、唯一的、非连续的 id。

    应该可以满足你的要求。官网:http://hashids.org

    一个例子:

    <?php
    
    $hashids = new Hashids\Hashids('this is my salt', 8, 'abcdefghij1234567890');
    
    $id = $hashids->encode(1, 2, 3);
    $numbers = $hashids->decode($id);
    
    var_dump($id, $numbers);
    string(5) "514cdi42"
    array(3) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-19
      • 2010-12-28
      • 1970-01-01
      • 1970-01-01
      • 2022-07-08
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      相关资源
      最近更新 更多