动态二维码的本质:
- 与静态二维码不同,动态二维码的内容不是固定不变的。它通常包含一个指向服务器资源的标识符(如一个订单号、一个临时令牌、一个会话ID),或者其本身的内容会定期刷新(如支付二维码)。
- 当用户扫描这个二维码时,扫码设备(通常是手机上的App)读取到的是这个动态信息,然后App会向对应的服务器发起请求(携带这个标识符或动态内容),服务器再根据这个信息返回最终的结果(如打开一个网页、确认支付、获取优惠券等)。
截图扫码的原因:
- 提高识别成功率: 直接对着屏幕扫描二维码时,可能会遇到各种干扰:
- 屏幕反光/眩光: 屏幕玻璃反射的环境光或灯光可能导致二维码识别困难。
- 屏幕刷新率/摩尔纹: 手机摄像头拍摄电子屏幕时,屏幕的刷新率和摄像头的采样率可能产生干涉条纹(摩尔纹),干扰二维码识别。
- 角度和距离: 用户可能因为角度不正或距离不合适,导致二维码变形或模糊。
- 屏幕亮度/对比度: 屏幕亮度不足或二维码区域对比度不够,影响识别。
- 相机对焦问题: 部分手机相机可能需要时间对焦在屏幕上的二维码上。
- 截图可以消除或减轻这些问题:
- 静态图像: 截图将动态的屏幕画面转化为一张静态图片。
- 无干扰: 这张图片不再有屏幕刷新、反光、摩尔纹等实时干扰。
- 可编辑/可放大: 用户可以在相册里查看截图,放大二维码区域,使其更清晰,便于扫码软件识别。用户也可以调整角度(虽然截图本身是正的,但放大后细节更清楚)。
动态验证依然有效:
- 关键点在于,截图只是获取了二维码的图像信息。当扫码软件识别这张截图中的二维码时,它读取到的仍然是那个动态的标识符或内容。
- 扫码软件将这个动态信息发送给服务器进行验证和处理。
- 只要这个动态信息在有效期内(例如,支付二维码通常在1-5分钟内有效),并且服务器验证通过,操作就能成功完成。截图并没有改变二维码所代表的动态信息的本质。
用户体验优化:
- 对于用户来说,截图操作相对简单熟悉。相比于举着手机反复调整角度和距离去对准屏幕,截图后打开相册、放大、再使用扫码功能选择这张图片,可能更符合部分用户的操作习惯,尤其是在光线复杂或屏幕难以看清的环境下。
- 在某些App中,直接从相册选择图片进行扫码比调用相机实时扫描更快捷稳定。
总结:
商家建议“截图扫码”主要是为了绕过直接扫描电子屏幕时可能遇到的各种光学干扰问题,提高二维码的识别成功率。其背后的技术原理是:截图提供了一张清晰、静态的二维码图像,方便扫码软件准确读取其中包含的动态信息(标识符或临时内容),扫码软件再将这些动态信息发送给服务器进行最终验证和处理,从而完成交易或操作。截图本身并不会导致动态二维码失效,只要在有效期内操作即可。