• PHP实现密码生成器包含大小写字母数字特殊字符


    function createPassword($length = 16)
    {
        $pwd = '';
        $num = 0;
        $str = "~!@#$%^&*_-+=`|\(){}[]:;\"'>,.?/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
        $count = strlen($str);
        while ((strlen($pwd) < $length) || $num < $length) {
            $rand = rand(0, $count);
            $sub = substr($str, $rand, 1);
            $pwd .= $sub;  //此处去除< 小于号,
            $num++;
            echo $pwd . '  自增值: ' . $num . '  随机字符位置: ' . $rand . '<br>';
        }
        return $pwd;
    }
    
    $createPwd = createPassword(32);
    echo '密码: ' . $createPwd;
    echo '<br>';
    echo "密码长度: " . strlen($createPwd);
    die;

    效果图;

    但不知道为什莫,字符串中不能带< 小于号,有时间再研究下,有大佬知道的可以给指点指点.

    解答:首先感谢大佬,在百忙之中,为小弟解惑

    这个问题简单易懂,但是你不真实操作下,往往容易忽略掉

    附上大佬给优化后的代码:

    function createPassword($length = 16)
    {
        $pwd = '';
        $num = 0;
        $str = "<~!@#$%^&*_-+=`|\(){}[]:;\"'>,.?/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
        $count = strlen($str);
        for($i = 0; $i < $length; $i++){
            $rand = rand(0, $count-1);
            $pwd .= $str[$rand];
            echo $pwd . '  自增值: ' . $num . '  随机字符位置: ' . $rand . '<br>';
        }
        return $pwd;
    }
    
    $createPwd = createPassword(32);
    echo '密码: ' . $createPwd;
    echo '<br>';
    echo "密码长度: " . strlen($createPwd);
    die;

    所以,要求不高的情况下,可以把< 去掉,或者在命令行直接操作就好.

    赞赏码

    非学,无以致疑;非问,无以广识

  • 相关阅读:
    centos安装rvm报错@curl -L get.rvm.io | bash -s stable fails on cent OS
    linux命令 环境设置 顺序
    mysql-5.7.20基本用法
    gitlab&Jenkins 详细介绍及其应用
    git 详细部署及其应用
    zabbix详细介绍及其自动动态发现
    redis 缓存应用
    Linux下rpm、yum和源码三种安装方式详细介绍
    js中获取时间new date()的用法
    Apache Tomcat/8.5.56 启动命令行中文乱码
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15452619.html
Copyright © 2020-2023  润新知