PHP生成随机码的思路与方法实例探索


Posted in PHP onApril 11, 2019

本文实例讲述了PHP生成随机码的思路与方法。分享给大家供大家参考,具体如下:

背景

今天因为无聊,小伙伴让写一个生成5位随机码的函数,要求:可包含数字、字母大小写,代码尽量短。

解题思路

(1) . 第一思路

都是印象中匹配ASCII码进行随机读取的实现方法,此处可提供一个方法作为参考:

function get_rand_ascii($pw_length = 5){
  $randpwd = '';
  for ($i = 0; $i < $pw_length; $i++) {
    $randpwd .= chr(mt_rand(33, 99));
  }
  return $randpwd;
}

(2) . 第二思路

1.定义随机数组,内含能够使用的所有字符

function getRandomString($length=5) {
  //可任意添加需要的字符
  $chars = array(
    "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", "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", "0", "1", "2",
    "3", "4", "5", "6", "7", "8", "9"
  );
  $charsLen = count ( $chars ) - 1;
  shuffle ( $chars ); // 将数组打乱
  $output = "";
  for($i = 0; $i < $length; $i ++) {
    $output .= $chars [mt_rand ( 0, $charsLen )];
  }
  return $output;
}

提示:此类的代码,建议去除可能引起歧义的字符,如:1、I、l、0、o、O、9、q.

缺点:5个字符没有重复

2.比较上述 1 中的数组形式,设计字符串形式参考如下:

function get_pass( $length = 8 ) {
  // 密码字符集,可任意添加你需要的字符
  $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_ []{}<>~`+=,.;:/?|';
  $password = '';
  for ( $i = 0; $i < $length; $i++ ) {
    // 这里提供两种字符获取方式
    // 第一种是使用 substr 截取$chars中的任意一位字符;
    // 第二种是取字符数组 $chars 的任意元素
    // $password .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
    $password .= $chars[ mt_rand(0, strlen($chars) - 1) ];
  }
  return $password;
}

(3) . 第三思路

发现的新思路,可使用加密算法进行获取

public function getRand(){
  $rand = rand(10000,100000);
  $str = substr(base64_encode($rand), 0, 5);
  return $str;
}

提示:md5()函数只有数字和小写的字母

发现:base64_encode()可以满足要求

拓展延伸

针对于PHP设计,一般的随机码可用于验证码、分享码的生成,着重注意位数的限制,必要情况下,保证该随机码的唯一性.

password_hash 的使用(PHP>5.5)

可用于用户的密码加密存储,不过有一点需注意:如果数据库迁移,对于java或.net语言将难以适用.

$password = 'password1232456';//前端 获取的原始密码
//数据库存放的 使用BCRYPT算法加密的密码
//此处仅为测试,实际应用时应从数据表中查询获得
//$db_pass = '$2y$10$2vJJC.rb/swAUnTfc9B94.l/ix75kiZHvOZFpu0Dd8uzp07YWlj4q';
$db_pass = password_hash($password, PASSWORD_BCRYPT);
if (password_verify($password , $db_pass)){
  echo "密码匹配";
}else{
  echo "密码错误";
}

参考文章:

PHP 相关文章推荐
PHP远程连接MYSQL数据库非常慢的解决方法
Jul 05 PHP
PHP日期时间函数的高级应用技巧
May 16 PHP
PHP 多进程 解决难题
Jun 22 PHP
解析PHP多种序列化与反序列化的方法
Jun 06 PHP
深入Memcache的Session数据的多服务器共享详解
Jun 13 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
Mar 13 PHP
PHP中使用curl入门教程
Jul 02 PHP
WordPress网站性能优化指南
Nov 18 PHP
PHP使用递归算法无限遍历数组示例
Jan 13 PHP
PHP空值检测函数与方法汇总
Nov 19 PHP
Laravel5框架自定义错误页面配置操作示例
Apr 17 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
Jun 12 PHP
PHP实现网站应用微信登录功能详解
Apr 11 #PHP
PHP之认识(二)关于Traits的用法详解
Apr 11 #PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
Apr 10 #PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
Apr 10 #PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
Apr 10 #PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
Apr 10 #PHP
ThinkPHP框架实现的微信支付接口开发完整示例
Apr 10 #PHP
You might like
php统计文件大小,以GB、MB、KB、B输出
2011/05/29 PHP
php启动时候提示PHP startup的解决方法
2013/05/07 PHP
PHP echo,print,printf,sprintf函数之间的区别与用法详解
2013/11/27 PHP
php+mysql大量用户登录解决方案分析
2014/12/29 PHP
php计算两个日期相差天数的方法
2015/03/14 PHP
php生成图片验证码
2015/06/09 PHP
学习php设计模式 php实现桥梁模式(bridge)
2015/12/07 PHP
Laravel执行migrate命令提示:No such file or directory的解决方法
2016/03/16 PHP
PHP实现清除MySQL死连接的方法
2016/07/23 PHP
PHP数组array类常见操作示例
2020/05/15 PHP
基于jquery的复制网页内容到WORD的实现代码
2011/02/16 Javascript
jQuery 追加元素的方法如append、prepend、before
2014/01/16 Javascript
jquery中JSON的解析方式
2015/03/16 Javascript
js获取字符串字节数方法小结
2015/06/09 Javascript
HTML5 canvas 9绘制图片实例详解
2016/09/06 Javascript
Vue.js双向绑定操作技巧(初级入门)
2016/12/27 Javascript
浅谈JavaScript中promise的使用
2017/01/11 Javascript
vuejs通过filterBy、orderBy实现搜索筛选、降序排序数据
2020/10/26 Javascript
jquery 一键复制到剪切板的实例
2017/09/20 jQuery
搭建vue开发环境
2018/07/19 Javascript
使用D3.js+Vue实现一个简单的柱形图
2018/08/05 Javascript
详解离线安装npm包的几种方法
2018/11/25 Javascript
Vue 使用计时器实现跑马灯效果的实例代码
2019/07/11 Javascript
小程序怎样让wx.navigateBack更好用的方法实现
2019/11/01 Javascript
Python3.5 处理文本txt,删除不需要的行方法
2018/12/10 Python
Python实现去除图片中指定颜色的像素功能示例
2019/04/13 Python
python filecmp.dircmp实现递归比对两个目录的方法
2020/05/22 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
2020/06/23 Python
HTML5之SVG 2D入门4—笔画与填充
2013/01/30 HTML / CSS
How to spawning asynchronous work in J2EE
2016/08/29 面试题
物流管理专业大学生自荐信
2013/10/04 职场文书
法学毕业生自我鉴定
2013/11/08 职场文书
大学旷课检讨书
2014/01/28 职场文书
基层党员对照检查材料
2014/08/25 职场文书
毕业论文答辩开场白和结束语
2015/05/27 职场文书
详解Python如何批量采集京东商品数据流程
2022/01/22 Python