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 相关文章推荐
js下函数般调用正则的方法附代码
Jun 22 PHP
php 函数使用方法与函数定义方法
May 09 PHP
PHP之APC缓存详细介绍 apc模块安装
Jan 13 PHP
PHP CURL 内存泄露问题解决方法
Feb 12 PHP
php魔术函数__call()用法实例分析
Feb 13 PHP
浅谈json_encode用法
Mar 05 PHP
分享ThinkPHP3.2中关联查询解决思路
Sep 20 PHP
基于PHP如何把汉字转化为拼音
Dec 11 PHP
Ajax中的JSON格式与php传输过程全面解析
Nov 14 PHP
PHP Laravel中的Trait使用方法
Jan 20 PHP
Laravel5.4框架使用socialite实现github登录的方法
Mar 20 PHP
PHP ElasticSearch做搜索实例讲解
Feb 05 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图片加中文水印实现代码分享
2012/10/31 PHP
Youku 视频绝对地址获取的方法详解
2013/06/26 PHP
php实例分享之mysql数据备份
2014/05/19 PHP
Yii中创建自己的Widget实例
2016/01/05 PHP
基于PHPexecl类生成复杂的报表表头示例
2016/10/14 PHP
详解PHP函数 strip_tags 处理字符串缺陷bug
2017/06/11 PHP
PHP排序算法之希尔排序(Shell Sort)实例分析
2018/04/20 PHP
JavaScript setTimeout和setInterval的使用方法 说明
2010/03/25 Javascript
js 剪切板的用法(clipboardData.setData)与js match函数介绍
2013/11/19 Javascript
Ext GridPanel加载完数据后进行操作示例代码
2014/06/17 Javascript
javaScript基础语法介绍
2015/02/28 Javascript
在JavaScript中处理时间之getHours()方法的使用
2015/06/10 Javascript
jQuery position() 函数详解以及jQuery中position函数的应用
2015/12/14 Javascript
图解js图片轮播效果
2015/12/20 Javascript
详解Angular-Cli中引用第三方库
2017/05/21 Javascript
基于JavaScript实现无缝滚动效果
2017/07/21 Javascript
微信小程序如何获取用户信息
2018/01/26 Javascript
在vue项目中正确使用iconfont的方法
2018/09/28 Javascript
cocos2dx+lua实现橡皮擦功能
2018/12/20 Javascript
jQuery事件委托代码实践详解
2019/06/21 jQuery
LayUI数据接口返回实体封装的例子
2019/09/12 Javascript
layui实现给某一列加点击事件
2019/10/26 Javascript
在Python中利用Pandas库处理大数据的简单介绍
2015/04/07 Python
Python中使用urllib2模块编写爬虫的简单上手示例
2016/01/20 Python
在python中利用KNN实现对iris进行分类的方法
2018/12/11 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
2019/01/15 Python
Django ValuesQuerySet转json方式
2020/03/16 Python
pandas处理csv文件的方法步骤
2020/10/16 Python
django中cookiecutter的使用教程
2020/12/03 Python
日本最大美瞳直送网:Morecontact(中文)
2019/04/03 全球购物
数学系毕业生的自我评价
2014/01/10 职场文书
计算机毕业生自荐信
2014/06/12 职场文书
幽默导游词开场白
2015/05/29 职场文书
python3 sqlite3限制条件查询的操作
2021/04/07 Python
对Golang中的FORM相关字段理解
2021/05/02 Golang