实验室的事

前一段时间,工作中碰到一件趣事,我们和某智能家居厂商合作开发时,对方提供的摄像头的二维码被摸得比较模糊,很难再扫描成功了。老大颇为恼怒:你们怎么这么不注意?在外面贴个胶纸嘛!以后摄像头不许再拿起来用了!
开发测试的同事也颇为无奈,这摄像头不拿起来很难测试;再说了,人家二维码都是印刷的,用很久都没影响,就你贴个小纸条......

当时基本上扫好几分钟才能扫到这个二维码,而且摄像头一般的手机根本没效果。老大也死心了,准备把摄像头发回厂商去,只是一来一回很麻烦。
我有天到实验室,就跟他们说,二维码不就是字符串吗?趁着现在还能扫描上,把那个字符串提取出来,重新生成二维码不就行了?开发老大马上为我点赞,拿着6s折腾了一会,算是成功了。而且如我所料,扫描自己生成的二维码也能用摄像头了。后来我把生成的二维码发到群里,就没有后顾之忧了。
二维码背后到底写的啥?
后来去查了一下,说二维码都是字符串实质上是不准确的。二维码存储的是少量的信息,其实它甚至可以存储极小的图片或视频的。但是那样二维码可能变得密密麻麻了,扫描也变得困难。
一般二维码存储的字符串都是不怎么长的,短的十多个字节,长的可达一百多字节。一时兴起就研究了一下一些常用的二维码到底代表什么。
当我用简书分享到微信的时候,得到的字符串是这样的:
http://www.jianshu.com/p/f7823b390cdb?utm_campaign=maleskine&utm_content=note&utm_medium=reader_share&utm_source=weixin
里面包含了网址,操作类型,来源去向等信息。
而当我在某网站使用QQ登录的时候,字符串出乎预料的短:
http://txz.qq.com/p?k=Z3TjEaBMgTMssDPpQBU3Rs-GsOYOZSKo&f=21000106
中间的内容没仔细探究,看起来可能是简单加密过的。
新浪微博登录就纠结了:
http://open.weibo.cn/oauth2/qrcode_authorize?client_id=2601122390&redirect_uri=https%3A%2F%2Fpassport.youkuaiyun.com%2Faccount%2Flogin%3Foauth_provider%3DSinaWeiboProvider&scope=&response_type=code&state=&vcode=b6412c4134f4e5cd0b3da9879337241b&frwbqr=50
反正参数是蛮多的,看得我都怀疑是不是超出了一般扫描器的范围。
当我设计规范的时候,有时候虽然一些参数意义不大,但是总有少数情况是需要包括的。像QQ登录那样的字符串反而显得很不正常。不过通过二维码的解析,可以看出这些大企业在一些步骤的思考和规范,是能稍稍借鉴一下的。