ue模糊查询_base64编码踩坑之身份证号模糊查询

本文讲述了在项目中遇到的身份证号存储和模糊查询的问题。原本使用Base64编码存储身份证号以保护隐私,但在尝试通过身份证号后4位或6位进行模糊查询时遇到困难。由于Base64编码的特性,直接使用LIKE匹配无法得到预期结果。通过深入理解Base64编码原理,发现需要在SQL中先解码再进行模糊查询,而该功能在MySQL 5.6及以上版本才支持。最终,通过升级MySQL并使用`from_base64()`函数解决了问题,加深了对Base64编码的理解。
摘要由CSDN通过智能技术生成

首先将我在项目中遇到的坑挖出来。在我们的项目中有这样的一个需求就是对于用户的身份证号在数据库中存储的时候不能是明文存储。鉴于这样的一个需求,很自然的我们就想到了用base64编码将身份证号进行编码然后存入数据库中。

经过上面的处理本来以为就没有什么问题了,但是由于我们对base64编码的编码原理并不是很了解,所以就导致我们在接下来的开发过程中掉进了一个我们自己给自己挖的坑中去了。新的需求是这样的:可以通过身份证号的后4位或者后6位模糊查询出用户信息,当然也可以通过完整的身份证号将这个用户的信息查找出来。通过完整的身份证号进行检索当然很容易实现,直接将输入的身份证号也进行base64编码然后去数据库中查找即可。|

然而对于身份证号的后4位或者6位编码之后再去数据表中通过like关键字匹配是否可行呢?当然我们开始也是这样去做的。我们想当然的认为,完整的身份证号base64编码之后的字串包含其后4位或者6位base64编码的字串。比如说先编码一个身份证号:

echo base64_encode('153933199401281934');

// output --- MTUzOTMzMTk5NDAxMjgxOTM0

然后对其后6位编码

echo base64_encode('281934');

// output --- MjgxOTM0j

看到结果和预想的一样。所以马上就很开心的用like去匹配了。但是当编码后4位的时候却发现结果出现了异常

echo base64_encode('1934');

// output --- MtkzNA==

在完整的身份证号的base64编码字串中并没有包含后四位的编码字串。那就说明直接使用like去匹配还是行不通的。

这时觉得还是有必要去了解一下base64到底是如何

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值