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 相关文章推荐
不用数据库的多用户文件自由上传投票系统(2)
Oct 09 PHP
php 如何获取数组第一个值
Aug 06 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
Nov 07 PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
Nov 12 PHP
Zend Framework教程之Loader以及PluginLoader用法详解
Mar 09 PHP
smarty自定义函数用法示例
May 20 PHP
php使用number_format函数截取小数的方法分析
May 27 PHP
一个简单安全的PHP验证码类、PHP验证码
Sep 24 PHP
深入了解PHP中的Array数组和foreach
Nov 06 PHP
php 根据自增id创建唯一编号类
Apr 06 PHP
Zend Framework框架中实现Ajax的方法示例
Jun 27 PHP
PHP实现登陆并抓取微信列表中最新一组微信消息的方法
Jul 10 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
一道求$b相对于$a的相对路径的php代码
2010/08/08 PHP
laravel 解决Validator使用中出现的问题
2019/10/25 PHP
PJBlog插件 防刷新的在线播放器
2006/10/25 Javascript
JavaScript中的Array对象使用说明
2011/01/17 Javascript
19个很有用的 JavaScript库推荐
2011/06/27 Javascript
jQuery中将函数赋值给变量的调用方法
2012/03/23 Javascript
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
JavaScript中“基本类型”之争小结
2013/01/03 Javascript
JQuery中的html()、text()、val()区别示例介绍
2014/09/01 Javascript
AngularJS入门教程之学习环境搭建
2014/12/06 Javascript
JavaScript模拟重力状态下抛物运动的方法
2015/03/03 Javascript
JavaScript知识点整理
2015/12/09 Javascript
javascript+HTML5 Canvas绘制转盘抽奖
2020/05/16 Javascript
JavaScript制作颜色反转小游戏
2016/09/25 Javascript
Bootstarp 基础教程之表单部分实例代码
2017/02/03 Javascript
如何正确理解javascript的模块化
2017/03/02 Javascript
vue 详情跳转至列表页实现列表页缓存
2019/03/27 Javascript
Vue.js轮播图走马灯代码实例(全)
2019/05/08 Javascript
浅析vue-router中params和query的区别
2019/12/24 Javascript
[09:40]DAC2018 4.5 SOLO赛 MidOne vs Miracle
2018/04/06 DOTA
Python实现读取txt文件并转换为excel的方法示例
2018/05/17 Python
python中数组和矩阵乘法及使用总结(推荐)
2019/05/18 Python
Python 中Django验证码功能的实现代码
2019/06/20 Python
基于Python实现扑克牌面试题
2019/12/11 Python
TensorFlow学习之分布式的TensorFlow运行环境
2020/02/05 Python
PyTorch笔记之scatter()函数的使用
2020/02/12 Python
Django Haystack 全文检索与关键词高亮的实现
2020/02/17 Python
django之从html页面表单获取输入的数据实例
2020/03/16 Python
Python二元算术运算常用方法解析
2020/09/15 Python
FitFlop美国官网:英国符合人体工学的鞋类品牌
2018/10/05 全球购物
教学实习自我评价
2014/01/28 职场文书
园林技术专业求职信
2014/07/28 职场文书
普通党员个人剖析材料
2014/10/08 职场文书
质量整改报告范文
2014/11/08 职场文书
煤矿安全学习心得体会
2016/01/18 职场文书
学习师德师风的心得体会(2篇)
2019/10/08 职场文书