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 session应用实例 登录验证
Mar 16 PHP
php $_SERVER当前完整url的写法
Nov 12 PHP
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
Aug 18 PHP
PHP编程风格规范分享
Jan 15 PHP
php开发中的页面跳转方法总结
Apr 26 PHP
php脚本运行时的超时机制详解
Feb 17 PHP
php动态读取数据清除最右边距的方法
Apr 12 PHP
iis6手工创建网站后无法运行php脚本的解决方法
Jun 08 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
Sep 20 PHP
PHP封装cURL工具类与应用示例
Jul 01 PHP
基于PHP的登录和注册的功能的实现
Aug 06 PHP
PHP使用Redis队列执行定时任务实例讲解
Mar 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
dede3.1分页文字采集过滤规则详说(图文教程)续二
2007/04/03 PHP
PHP封装的验证码工具类定义与用法示例
2018/08/22 PHP
PHP获取远程http或ftp文件的md5值的方法
2019/04/15 PHP
jquery插件 cluetip 关键词注释
2010/01/12 Javascript
Javascript 面向对象(二)封装代码
2012/05/23 Javascript
JavaScript实现的简单拖拽效果
2015/06/01 Javascript
基于html5和nodejs相结合实现websocket即使通讯
2015/11/19 NodeJs
JS正则表达式比较常见用法
2016/01/26 Javascript
基于JavaScript实现瀑布流布局(二)
2016/01/26 Javascript
jQuery实现图片向左向右切换效果的简单实例
2016/05/18 Javascript
JS中使用变量保存arguments对象的方法
2016/06/03 Javascript
js实现交通灯效果
2017/01/13 Javascript
微信小程序的动画效果详解
2017/01/18 Javascript
微信小程序 页面跳转及数据传递详解
2017/03/14 Javascript
JavaScript代码判断输入的字符串是否含有特殊字符和表情代码实例
2017/08/17 Javascript
vue组件watch属性实例讲解
2017/11/07 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
通过fastclick源码分析彻底解决tap“点透”
2017/12/24 Javascript
vue 动态组件用法示例小结
2020/03/06 Javascript
python之yield表达式学习
2014/09/02 Python
Python使用 Beanstalkd 做异步任务处理的方法
2018/04/24 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
2018/07/06 Python
修改默认的pip版本为对应python2.7的方法
2018/11/06 Python
python实现学生信息管理系统(精简版)
2020/11/27 Python
一款利用纯css3实现的超炫3D表单的实例教程
2014/12/01 HTML / CSS
CSS3 实现倒计时效果
2020/11/25 HTML / CSS
德国宠物用品、宠物食品及水族馆网上商店:ZooRoyal
2017/07/09 全球购物
《蜗牛》教学反思
2014/02/18 职场文书
幼儿园端午节活动方案
2014/08/25 职场文书
高中生旷课检讨书
2014/10/08 职场文书
先进学校事迹材料
2014/12/30 职场文书
中职班主任培训心得体会
2016/01/07 职场文书
《西门豹》教学反思
2016/02/23 职场文书
pytorch 运行一段时间后出现GPU OOM的问题
2021/06/02 Python
浅谈JavaScript浅拷贝和深拷贝
2021/11/07 Javascript
Python用tkinter实现自定义记事本的方法详解
2022/03/31 Python