最近系统中遇到的几个bug

代扣少一分钱

       今天细心的财务妹子对账,发现代扣系统中的金额和系统应还的金额差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取的是客户机的时间,所以就存在严重的安全漏洞;此处应该以服务端的时间进行判断才对。

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

猜你喜欢

转载自hellojava.iteye.com/blog/2344695