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 相关文章推荐
使用 php4 加速 web 传输
Oct 09 PHP
一个简单的php实现的MySQL数据浏览器
Mar 11 PHP
PHP 抓取网页图片并且另存为的实现代码
Mar 24 PHP
php自动给文章加关键词链接的函数代码
Nov 29 PHP
PHP用身份证号获取星座和生肖的方法
Nov 07 PHP
php判断GIF图片是否为动画的方法
Sep 04 PHP
浅谈php安全性需要注意的几点事项
Jul 17 PHP
php+ajax无刷新上传图片的实现方法
Dec 06 PHP
Laravel学习教程之View模块详解
Sep 18 PHP
Laravel核心解读之异常处理的实践过程
Feb 24 PHP
php和html的区别点详细总结
Sep 24 PHP
PHP随机生成中文段落示例【测试网站内容时使用】
Apr 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安全编程之加密功能
2006/10/09 PHP
修改了一个很不错的php验证码(支持中文)
2007/02/14 PHP
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
2014/06/09 PHP
PHP 自动加载的简单实现(推荐)
2016/08/12 PHP
javascript textContent与innerText的异同分析
2010/10/22 Javascript
jQuery编辑器KindEditor4.1.4代码高亮显示设置教程
2013/03/01 Javascript
js中自定义方法实现停留几秒sleep
2014/07/11 Javascript
js树插件zTree获取所有选中节点数据的方法
2015/01/28 Javascript
JS实现从表格中动态删除指定行的方法
2015/03/31 Javascript
Jquery遍历select option和添加移除option的实现方法
2016/08/26 Javascript
详解vue-router 2.0 常用基础知识点之router-link
2017/05/10 Javascript
JS对象和字符串之间互换操作实例分析
2019/02/02 Javascript
使用Layer组件弹出多个对话框(非嵌套)与关闭及刷新的例子
2019/09/25 Javascript
微信小程序学习总结(二)样式、属性、模板操作分析
2020/06/04 Javascript
Electron实现应用打包、自动升级过程解析
2020/07/07 Javascript
JavaScript常用进制转换及位运算实例解析
2020/10/14 Javascript
[03:21]辉夜杯主赛事 12月25日TOP5
2015/12/26 DOTA
[01:42:49]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第一场 2月26日
2021/03/11 DOTA
python制作websocket服务器实例分享
2016/11/20 Python
python中通过预先编译正则表达式提高效率
2017/09/25 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
2017/11/29 Python
Python+selenium实现截图图片并保存截取的图片
2018/01/05 Python
python3+PyQt5+Qt Designer实现扩展对话框
2018/04/20 Python
python实现多层感知器MLP(基于双月数据集)
2019/01/18 Python
运用PyTorch动手搭建一个共享单车预测器
2019/08/06 Python
Tensorflow训练MNIST手写数字识别模型
2020/02/13 Python
python的Jenkins接口调用方式
2020/05/12 Python
老海军美国官网:Old Navy
2016/09/05 全球购物
size?荷兰官方网站:英国高级运动鞋精品店
2020/07/24 全球购物
电气工程及其自动化自我评价四篇
2013/09/24 职场文书
数控个人求职信范文
2014/02/03 职场文书
《母亲的恩情》教学反思
2014/02/13 职场文书
基于Nginx实现限制某IP短时间访问次数
2021/03/31 Servers
教你怎么用Python生成九宫格照片
2021/05/20 Python
Golang 实现WebSockets
2022/04/24 Golang
python manim实现排序算法动画示例
2022/08/14 Python