【问题标题】:PHP How to render Unique Key?PHP如何呈现唯一键?
【发布时间】:2021-08-26 10:49:11
【问题描述】:

我想渲染这样一个键或类似的,但我不希望“-”符号出现在开头。我现在的代码意味着这个字符也可以在开头生成,我希望它永远不会在开头和结尾生成,而只能在末尾和开头的X字符之后的中间生成,其中X是从侧面算起的字符数

6LdBaA6aBxOAsj0AoTJ8rC-NbzpzAPgVaAz1bnAE

我的代码

// Generowanie Unique Key
if(!function_exists('genetateUniqueKey')){
    function genetateUniqueKey($length = 40){
        $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0987654321-'.time();
        $charactersLength = strlen($characters);
        $randomString = '';
        for($i = $length; $i > 0; $i--){
            $randomString .= $characters[rand(0, $charactersLength - 1)];
        }
        return $randomString;
    }
}

提前感谢您的帮助:)

【问题讨论】:

  • $characters不包括“-”的地方生成x个字符,然后在$characters包括“-”的地方生成更多字符,然后再次生成x其中不包括“-”...!?
  • 为什么不完全删除“-”?
  • @deceze 但是我应该怎么做才能让它运作良好并考虑到整个生成密钥的长度并且在这样一个块中“可扩展”,例如,当我给出长度为20,长度会减半,之后这个字符可以吗?
  • @Kondzio:字符串的长度如何影响它?对于长度为 X 的任何字符串...生成 1 字符,其中“-”不是选项;生成 X - 2 个字符,其中“-”是一个选项;生成 1 字符,其中“-”不是一个选项;连接三个结果。你有没有尝试过?什么不起作用?
  • 不要气馁,但是,这是一个雄心勃勃的计划,如果您从这个问题开始......无论哪种方式,- 可能意味着 reCaptcha。如果它对你没有任何意义,为什么要将它包含在这些非常具体的规则中……?

标签: php random key generated-code


【解决方案1】:

我正在对您的代码进行一些更改

字符串将根据 $length 中的值从两边修剪

编辑: 对不起,我错误地给出了错误的代码。试试这个:

// Generowanie Unique Key
if (!function_exists('genetateUniqueKey')) {
    function genetateUniqueKey($length = 40)
    {
        $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0987654321';
        $randomString = str_shuffle($characters) . "-" . str_shuffle($characters);
        return substr($randomString, 55, $length);
    }
} 

【讨论】:

  • 洗牌和反复挑选随机字符是非常不同的算法,在熵方面具有非常不同的属性。
  • 这段代码不起作用,因为它显示了超过 100 个字符,所以你可能没有检查它是否显示正确的长度
  • 对不起,我错误地给出了错误的代码。我做了一些改变。请尝试一下
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-12
  • 2017-07-26
相关资源
最近更新 更多