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 缓存实现代码及详细注释
May 16 PHP
fleaphp常用方法分页之Pager使用方法
Apr 23 PHP
php和javascript之间变量的传递实现代码
Dec 19 PHP
探讨Hessian在PHP中的使用分析
Jun 13 PHP
PHP设计模式之迭代器模式的深入解析
Jun 13 PHP
php foreach循环中使用引用的问题
Nov 06 PHP
mac环境中使用brew安装php5.5.15
Aug 18 PHP
smarty表格换行实例
Dec 15 PHP
WordPress中给文章添加自定义字段及后台编辑功能区域
Dec 19 PHP
微信公众平台开发(五) 天气预报功能开发
Dec 03 PHP
PHP实现防盗链的方法分析
Jul 25 PHP
PHP实现一维数组与二维数组去重功能示例
May 24 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中unserialize返回false的解决方法
2014/09/22 PHP
文件上传之SWFUpload插件(代码)
2015/07/30 PHP
PHP设计模式之工厂模式详解
2017/10/24 PHP
关于PhpStorm设置点击编辑文件自动定位源文件的实现方式
2020/12/30 PHP
javascript下阻止表单重复提交、防刷新、防后退
2007/08/17 Javascript
解读IE和firefox下JScript和HREF的执行顺序
2008/01/12 Javascript
点击下载链接 弹出页面实现代码
2009/10/01 Javascript
默认让页面的第一个控件选中的javascript代码
2009/12/26 Javascript
jquery滚动加载数据的方法
2015/03/09 Javascript
javascript动态添加删除tabs标签的方法
2015/07/06 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
2015/09/19 Javascript
JavaScript事件用法浅析
2016/10/31 Javascript
JS生成和下载二维码的代码
2016/12/07 Javascript
jQuery图片切换动画效果
2017/02/28 Javascript
Linux使用Node.js建立访问静态网页的服务实例详解
2017/03/21 Javascript
Extjs 中的 Treepanel 实现菜单级联选中效果及实例代码
2017/08/22 Javascript
写给vue新手们的vue渲染页面教程
2017/09/01 Javascript
详解如何将 Vue-cli 改造成支持多页面的 history 模式
2017/11/20 Javascript
JavaScript面向对象程序设计创建对象的方法分析
2018/08/13 Javascript
webpack4.x下babel的安装、配置及使用详解
2019/03/07 Javascript
jQuery 添加元素和删除元素的方法
2020/07/15 jQuery
详解Vue 的异常处理机制
2020/11/30 Vue.js
python发布模块的步骤分享
2014/02/21 Python
基于Python实现一个简单的银行转账操作
2016/03/06 Python
python实现从pdf文件中提取文本,并自动翻译的方法
2018/11/28 Python
HTML5 用动画的表现形式装载图像
2016/03/08 HTML / CSS
台湾乐天市场:日本No.1的网路购物网站
2017/03/22 全球购物
Under Armour西班牙官网:美国知名的高端功能性运动品牌
2018/12/12 全球购物
小学生检讨书大全
2014/02/06 职场文书
《春天来了》教学反思
2014/04/07 职场文书
贯彻落实“八项规定”思想汇报
2014/09/13 职场文书
乡镇领导班子四风整顿行动工作汇报
2014/10/25 职场文书
卫生保健工作总结2015
2015/05/18 职场文书
2016年幼儿园教师政治学习心得体会
2016/01/23 职场文书
python turtle绘图
2022/05/04 Python
CSS实现鼠标悬浮动画特效
2023/05/07 HTML / CSS