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验证码代码
Feb 27 PHP
在wamp集成环境下升级php版本(实现方法)
Jul 01 PHP
显示youtube视频缩略图和Vimeo视频缩略图代码分享
Feb 13 PHP
PHP中提问频率最高的11个面试题和答案
Sep 02 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
Feb 16 PHP
PHP中的traits实现代码复用使用实例
May 13 PHP
编写PHP脚本过滤用户上传的图片
Jul 03 PHP
php实现文章置顶功能的方法
Oct 20 PHP
PHP+jQuery实现双击修改table表格功能示例
Feb 21 PHP
Laravel基础-关于引入公共文件的两种方式
Oct 18 PHP
PHP单元测试配置与使用方法详解
Dec 27 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
May 26 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扩展ZF――Validate扩展
2008/01/10 PHP
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
2012/09/19 PHP
解析PHP无限级分类方法及代码
2013/06/21 PHP
基于thinkPHP实现的微信自定义分享功能示例
2016/09/23 PHP
yii使用bootstrap分页样式的实例
2017/01/17 PHP
jQuery 表格插件整理
2010/04/27 Javascript
jWiard 基于JQuery的强大的向导控件介绍
2011/10/28 Javascript
JavaScript插入动态样式实现代码
2012/02/22 Javascript
Javascript 加载和执行-性能提高篇
2012/12/28 Javascript
JQuery实现当鼠标停留在某区域3秒后自动执行
2014/09/09 Javascript
JavaScript AOP编程实例
2015/06/16 Javascript
每天一篇javascript学习小结(基础知识)
2015/11/10 Javascript
给easyui datebox扩展一个清空的实例
2016/11/09 Javascript
详解Angular 4.x NgIf 的用法
2017/05/22 Javascript
jquery 一键复制到剪切板的实例
2017/09/20 jQuery
微信小程序实战篇之购物车的实现代码示例
2017/11/30 Javascript
详解基于vue-cli配置移动端自适应
2018/01/13 Javascript
Vue项目pdf(base64)转图片遇到的问题及解决方法
2018/10/19 Javascript
JS实现二维数组元素的排列组合运算简单示例
2019/01/28 Javascript
js纯前端实现腾讯cos文件上传功能的示例代码
2019/05/14 Javascript
vue+element表格导出为Excel文件
2019/09/26 Javascript
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
2021/03/01 Vue.js
Python写的PHPMyAdmin暴力破解工具代码
2014/08/06 Python
实例讲解Python中的私有属性
2014/08/21 Python
Python实现列表转换成字典数据结构的方法
2016/03/11 Python
python字符串过滤性能比较5种方法
2017/06/22 Python
python 创建一个空dataframe 然后添加行数据的实例
2018/06/07 Python
利用django-suit模板添加自定义的菜单、页面及设置访问权限
2018/07/13 Python
Python二叉搜索树与双向链表转换算法示例
2019/03/02 Python
通过pycharm使用git的步骤(图文详解)
2019/06/13 Python
如何将anaconda安装配置的mmdetection环境离线拷贝到另一台电脑
2020/10/15 Python
加热夹克:RAVEAN
2018/10/19 全球购物
员工考核评语大全
2014/04/26 职场文书
找工作求职信
2014/07/07 职场文书
2019奶茶店创业计划书范本!
2019/07/15 职场文书
浅谈Golang 嵌套 interface 的赋值问题
2021/04/29 Golang