php批量改文件名
如何使用PHP生成随机字符串?
如何使用PHP生成随机字符串?
引言我们经常可能会用到邀请码,邮件验证码,或者需要使用unique 字符串标记用户属性的情况。
今天我们且不说高深的“全局唯一ID”的生成方案,我们说一个简单的,如何生成一个唯一的,随机的,数组字母组成的字符串。
学习时间PHP 有一个内置函数 uniqid,用于生成一个唯一的ID。该函数结构形式:
string uniqid([ string $prefix [, bool $more_entropy false]] )
用于获取一个带前缀、基于当前时间微秒数的唯一ID。
但是该方法所生成的ID并不是安全的,且依赖于本机的时间戳,有可能在同一微秒生成同一ID。所以安全起见,需要添加上 prefix 参数,以示区别。
more_entropy 参数使生成的ID更具有唯一性,如果设置为 TRUE,uniqid() 会在返回的字符串结尾增加额外的煽(使用combined linear congruential generator)。
这就够了吗?这当然不是最优的解决方法。我们尝试其他解决方案。使用 openssl 带来的加密性和唯一性。
bin2hex(openssl_random_pseudo_bytes($bytes))
使用 openssl_random_pseudo_bytes 函数生成一个伪随机字符串的字节,然后使用 bin2hex 将其格式化为十六进制的字符串。
生成的伪随机字节,其字节数由length参数确定。还指示是否使用了加密功能强的算法来生成伪随机字节,并通过可选的crypto_strongparameter来执行此操作。 此种方法返回的参数,很少情况下会出现false。
美中不足的是,这样生成的数字字符串,只在[0-9][a-z]之间,不够广泛。我们尝试加固这个生成方法,增强其鲁棒性。
上述函数会生成一个区间位于 [$min, $max] 的随机数字。然后调用该函数生成指定长度的字符串。
函数 crypto_rand_secure 函数的实现方法,在PHP标准函数中,可以使用 rand / mt_rand 函数替代。
在PHP 7 中,系统提供了更好的函数,可以替代 crypto_rand_secure 使用,就是 random_bytes 和 random_int。使用内置函数,我们将 getToken 函数改造如下:
当然少不了的测试结果,我们批量生成一些 32 位长度的字符串。
写在最后本文深入探讨了生成随机数字,进而生成指定长度的字符串,实现函数并进行了测试。大家可以在机器环境进行测试。
Happy coding :_)
我是 @程序员小助手 ,持续分享编程知识,欢迎关注。
开发一个app有多难?
先说一点,我是前端工程师,所以开发app使用的是H5的东西,不是原生安卓和IOS,当然还有个很火热的Flutter,虽然没完全投入使用。所以我以下说的只针对前端的想开发app的朋友。当然我也刚开发了几个,还有很多经验不足,如果写的有问题希望指正。
其实我做开发刚刚一年多的时间,说实话我感觉如果只是开发市面上已经有的东西,还是相对容易的,现在有很多成熟的框架,有很不错的api借鉴,网上也有很多资源,很多时候都可以查找到。你遇到问题之前没准有很多前辈已经遇到过,多多上官方论坛,跟大家交流学习。我感觉真正困难的东西是你能不能做下去,不是说碰到个问题想都不想就找人问,这样的态度我不推荐。即使你的问题很简单,最后发现原来只是两行代码的事,但是这个结果也源于你之前的不断追问,知识学到了才是自己的。
跟大家简单分享下我的经历。第一个app是用的mui开发物流手持,简单说就是接单完单上传信息,查找历史单等等。公司就我一个前端,做项目之前mui我也才看了一周左右。确实只不过是html页面而已,但是也有很多调用原生的东西。记得那个时候每天都工作到很晚,简单的登录列表显示页面,这些还是好写的。晚上下班之后我就留在公司查阅怎么调用系统摄像头,怎么使用二维码,怎么调用支付收款。也很紧张,自己从零开始做没人带。后来看了官方集成的html5 ,很多都有样例,当然也会结合自己的功能稍作改动。也加入了几个qq群,虽然说有很多扯淡,但是也有很多人在探讨技术。所以资源很多,自己主动去找。后来在开发的时候,开发效率就很快了。
当时有个很麻烦的事是调用地图。我是pc和app同时做的,pc派送,app接单,用的都是高德地图jsapi。但是到手机上就不好使了,我也不知为什么。也找了很多东西,但是打包出来的基本是地图不显示。问了有个人的显示,再细问他呢,他就说我也是刚弄,我的就能出来,人家厉害,我能说什么,自己捅咕呗。我清晰地记得弄了三周,别的布局什么写的也很快,所以经常弄地图了。最后真的是瞎猫碰上死耗子了,我真的不懂为什么是不是跟软件版本还是什么有关系。我没用sdk但是引了百度的地图sdk,jsapi使用的高德的,显示成功。当然很多人会疑问,你们不要纠结这个,重要的是效果一定要出来,我说出来可能很容易,也可能是运气,但是这一些都是建立在前期自己的努力思考,查阅资料。原来是看书明白了稻盛和夫,现在是实践中理解了稻盛和夫先生。
现在我在使用mui团队开发的另一个框架uniapp开发一个简易版的头条。也是文章,专家,订阅,评论等等内容。开始时候自己慢慢看文档,看官方例子,动手去书写,深入了一下flex布局。公用的分装,优化promise请求。当然也遇到很多坑,像软键盘弹出对布局的挤压,这里面没有window,document这些浏览器的对象了。像富文本解析,还要对解析出来的文本字体放大缩小,图片点击,复制粘贴。uniapp基本是基于微信小程序的api 语法,所以自己也去搞去找,上个月忙了整月,现在基本都可以了。不怕走歪路,走多了就知道怎么思考了,怎么解决问题了。
我只是个小开发,仍然在学习,在发现。希望跟大家齐一进步。如果有想了解得东西可以给我留言,我也希望去分享自己的经历。百度网盘也有些教程,有需要的小伙伴可以找我,不需关注。谢谢阅读!