PHP中快速生成随机密码的几种方式


Posted in PHP onApril 17, 2017

思路是这样的,密码通常是英文字母和数字的混合编排,我们可以借助随机函数rand函数随机的选择一个长字符串的一部分。

function random_code($length = 8,$chars = null){
  if(empty($chars)){
    $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  }
  $count = strlen($chars) - 1;
  $code = '';
  while( strlen($code) < $length){
    $code .= substr($chars,rand(0,$count),1);
  }
  return $code;
}
echo random_code;//A1zYbN5X

我们使用rand函数的目的是为了产生随机的字符串,但是如果有一个函数可以做到的话,我们就没有必要使用rand函数了。

function random_char($length = 8,$chars = null){
  if( empty($chars) ){
    $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  }
  $chars = str_shuffle($chars);
  $num = $length < strlen($chars) - 1 ? $length:str_len($chars) - 1;
  return substr($chars,0,$num);
}

可以看到不使用rand函数,而是使用str_shuffle函数,好处是大大减少了代码量。

更近一部的,我们的函数不仅可以生成随机的密码,还可以生成短信验证码,以及高强度的服务器登录密码。

function random_code_type($length = 8,$type = 'alpha-number'){
  $code_arr = array(
    'alpha' => 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
    'number'=> '0123456789',
    'sign'  => '#$%@*-_',
  );

  $type_arr = explode('-',$type);

  foreach($type_arr as $t){
    if( ! array_key_exists($t,$code_arr)){
      trigger_error("Can not generate type ($t) code");
    }
  }

  $chars = '';

  foreach($type_arr as $t){
    $chars .= $code_arr[$t];
  }
  $chars = str_shuffle($chars);
  $number = $length > strlen($chars) - 1 ? strlen($chars) - 1:$length;
  return substr($chars,0,$number);
}

echo random_code_type(8,"alpha-number-sign");#kXM*mC$S

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
使用eAccelerator加密PHP程序
Oct 03 PHP
php miniBB中文乱码问题解决方法
Nov 25 PHP
php 空格,换行,跳格使用说明
Dec 18 PHP
php实现rc4加密算法代码
Apr 25 PHP
解析左右值无限分类的实现算法
Jun 20 PHP
php常用ODBC函数集(详细)
Jun 24 PHP
php出现web系统多域名登录失败的解决方法
Sep 30 PHP
PHPCMS2008广告模板SQL注入漏洞修复
Oct 11 PHP
thinkPHP5项目中实现QQ第三方登录功能
Oct 20 PHP
详解laravel安装使用Passport(Api认证)
Jul 27 PHP
PHP pthreads v3下worker和pool的使用方法示例
Feb 21 PHP
Laravel框架下的Contracts契约详解
Mar 17 PHP
IIS 7.5 asp Session超时时间设置方法
Apr 17 #PHP
关于php 高并发解决的一点思路
Apr 16 #PHP
PHP无限极分类函数的实现方法详解
Apr 15 #PHP
基于ThinkPHP实现的日历功能实例详解
Apr 15 #PHP
php修改数组键名的方法示例
Apr 15 #PHP
php自定义函数实现统计中文字符串长度的方法小结
Apr 15 #PHP
php+mysql+jquery实现简易的检索自动补全提示功能
Apr 15 #PHP
You might like
php读取mysql中文数据出现乱码的解决方法
2013/08/16 PHP
PHP检测字符串是否为UTF8编码的常用方法
2014/11/21 PHP
PHP截取指定图片大小的方法
2014/12/10 PHP
php实现四舍五入的方法小结
2015/03/03 PHP
thinkphp5修改view到根目录实例方法
2019/07/02 PHP
Thinkphp5.0框架视图view的循环标签用法示例
2019/10/12 PHP
javascript 通用简单的table选项卡实现
2010/05/07 Javascript
JS Range HTML文档/文字内容选中、库及应用介绍
2011/05/12 Javascript
禁止空格提交表单的js代码
2013/11/17 Javascript
js计算两个时间之间天数差的实例代码
2013/11/19 Javascript
Egret引擎开发指南之运行项目
2014/09/03 Javascript
JavaScript运算符小结
2015/06/03 Javascript
Bootstrap创建可折叠的组件
2016/02/23 Javascript
BootStrap制作导航条实例代码
2016/05/06 Javascript
IE8利用自带的setCapture和releaseCapture解决iframe的拖拽事件方法
2016/10/25 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
2016/12/02 Javascript
JS实现简单抖动效果
2017/06/01 Javascript
JavaScript的查询机制LHS和RHS解析
2019/08/16 Javascript
JavaScript如何借用构造函数继承
2019/11/06 Javascript
vue-router结合vuex实现用户权限控制功能
2019/11/14 Javascript
jQuery实现可编辑的表格
2019/12/11 jQuery
Python 文件重命名工具代码
2009/07/26 Python
windows上安装python3教程以及环境变量配置详解
2019/07/18 Python
对django 模型 unique together的示例讲解
2019/08/06 Python
使用Python脚本zabbix自定义key监控oracle连接状态
2019/08/28 Python
pytorch中的inference使用实例
2020/02/20 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
2020/02/28 Python
如何基于Python按行合并两个txt
2020/11/03 Python
python opencv角点检测连线功能的实现代码
2020/11/24 Python
HTML5 Web Workers之网站也能多线程的实现
2013/04/24 HTML / CSS
六年级数学教学反思
2014/02/03 职场文书
《油菜花开了》教学反思
2014/02/22 职场文书
《从现在开始》教学反思
2014/04/15 职场文书
企业与个人合作经营协议书
2014/11/01 职场文书
Win11黑色桌面背景怎么办?Win11黑色壁纸解决方法汇总
2022/04/05 数码科技
vue特效之翻牌动画
2022/04/20 Vue.js