最近系统中遇到的几个bug

本文讲述了在代扣系统中出现的一分钱误差问题及其解决方案,并分享了一个因前端时间校验不当导致用户年龄误判的真实案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代扣少一分钱

       今天细心的财务妹子对账,发现代扣系统中的金额和系统应还的金额差1分钱,对,是1分钱,然后较真的财务妹子顿时不乐意了,逼着研发找原因。好吧,原因找到了,问题在于new Double(amout*100).intValue()这个方法。

        amount=643.81元,那么new Double(amout*100)可不一定我们想象的是64381(单位分,代扣的金额一般是整数,但是单位是分),比如可能死64380.999999,这样刚好碰到了.intValue()这个粗暴阶段的取整方法,就会变成64380分,也就是643.80元。

         针对这种情况,比较保险的做法是做四舍五入的取整,例如new BigDecimal(value).setScale(0, BigDecimal.ROUND_HALF_UP).intValue()

 

身份证校验总是小于18岁

          处于业务需要,我们的身份证进行校验,不允许不满18周岁的人办理业务。前面报过来一个问题,一个SA录单的时候提示不满18岁,但是从身份证来看是应该都20岁了。别人录单或者别人使用它的工号录单都没有这个问题。SA们自己发动了细心排查后,最终发现他的机器和别人不同,系统时间还是11年的,改了时间后好了。

          汗颜,这个其实应该是开发的问题,开发是在前端用js校验时间的,使用new Date()取的当前时间和身份证的出生日期进行的比较,而js取的是客户机的时间,所以就存在严重的安全漏洞;此处应该以服务端的时间进行判断才对。

          之前对前端了解不够深入,算是长了见识。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值