json_decode() 难住了 ThinkPHP

起因现象

做项目的一个手机验证码发送功能,为了优化用户输入的准确度,我将随机生成的四数字验证码在同时发送给用户的时候存储到redis种一份,并设置有效期300秒,如果当用户未收到验证码再次获取验证码的时候,我会先从redis种读取,如果redis种有,直接发送redis中的,确保短信通知延迟到达或者多条到达时候的用户判断效率。

项目这快用的是ThinkPHP开发,而且通过ThinkPHP的S()方法可以很便捷的实现这个功能。然后问题就出现了,在一次测试过程中,我先是收到了一条验证码是“0327”的,再次获取验证码的时候收到的是“327”,前面的“0”不见了。通过多次测试,确定了这个bug,如果随机生成的验证码是0开头的,那么再次获取的验证码就会把头部的0全部去掉。

问题分析

虽说不是什么致命性bug,但是作为程序员,我还是要解决的。先分析一下是哪里出了问题:

PHP数据类型?

第一想法是,是不是因为随时生成出来的是一个四数字,PHP是不是把这个四数字用int型存储,因为int型前面加再多0都会被PHP当作空或者转换成8进制。于是我就用了三种方法将生成出来的四数字转换成string型。