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 相关文章推荐
支持oicq头像的留言簿(一)
Oct 09 PHP
Windows7下PHP开发环境安装配置图文方法
May 20 PHP
基于PHP读取TXT文件向数据库导入海量数据的方法
Apr 23 PHP
PHP5中GD库生成图形验证码(有汉字)
Jul 28 PHP
腾讯QQ微博API接口获取微博内容
Oct 30 PHP
php在线解压ZIP文件的方法
Dec 30 PHP
php操作xml入门之cdata区段
Jan 23 PHP
php使用COPY函数更新配置文件的方法
Jun 18 PHP
基于PHP代码实现中奖概率算法可用于刮刮卡、大转盘等抽奖算法
Dec 20 PHP
thinkPHP中分页用法实例分析
Dec 26 PHP
PHP7新增运算符用法实例分析
Sep 26 PHP
php高清晰度无损图片压缩功能的实现代码
Dec 09 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实现像JSP,ASP里Application那样的全局变量
2007/01/12 PHP
第二章 PHP入门基础之php代码写法
2011/12/30 PHP
php查看网页源代码的方法
2015/03/13 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
2017/04/26 PHP
Laravel事件监听器用法实例分析
2019/03/12 PHP
xml 与javascript结合的问题解决方法
2007/03/24 Javascript
jquery 插件 任意位置浮动固定层
2008/12/25 Javascript
Javascript 代码也可以变得优美的实现方法
2009/06/22 Javascript
jquery ajax 同步异步的执行 return值不能取得的解决方案
2012/01/08 Javascript
jQuery图片播放8款精美插件分享
2013/02/17 Javascript
jquery ajax方式直接提交整个表单核心代码
2013/08/15 Javascript
jQuery中ajax和post处理json的不同示例对比
2014/11/02 Javascript
javascript格式化指定日期对象的方法
2015/04/21 Javascript
JavaScript性能优化之小知识总结
2015/11/20 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
2016/04/30 Javascript
JavaScript中的对象和原型(一)
2016/08/12 Javascript
jQuery实现两列等高并自适应高度
2016/12/22 Javascript
JavaScript+H5实现微信摇一摇功能
2018/05/23 Javascript
详解js的视频和音频采集
2018/08/09 Javascript
ES6基础之 Promise 对象用法实例详解
2019/08/22 Javascript
js 递归json树实现根据子id查父id的方法分析
2019/11/08 Javascript
AngularJS动态生成select下拉框的方法实例
2019/11/17 Javascript
详解Vue template 如何支持多个根结点
2020/02/10 Javascript
Vue中父子组件的值传递与方法传递
2020/09/28 Javascript
[04:09]显微镜下的DOTA2第十二期—NaVi美如画的团战
2014/06/23 DOTA
Python FTP操作类代码分享
2014/05/13 Python
Python实现快速计算词频功能示例
2018/06/25 Python
python实现猜数字游戏
2020/03/25 Python
Python for i in range ()用法详解
2020/09/18 Python
Python 生成VOC格式的标签实例
2020/03/10 Python
Django框架models使用group by详解
2020/03/11 Python
应聘医药销售自荐书范文
2014/02/08 职场文书
2014学雷锋活动总结
2014/03/09 职场文书
追讨欠款律师函
2015/05/27 职场文书
失恋33天观后感
2015/06/11 职场文书
《纸船和风筝》教学反思
2016/02/18 职场文书