Java之唯一无序数生成


1  背景介绍

在许多项目中ID号是一个永恒的主题。在绝大多数情况下,这个唯一ID产生相对比较容易,毕竟现在众多的项目都是基于数据库的,只要把数据库的主键拿出来作为ID就可以确保ID在整个系统中的唯一性了。但也存在一些特殊情况。比如,一个在线订单生成。考虑到订单的特殊性,有时候会被要求订单号要没有规律不连续。但是我们也知道订单号是必须具有唯一性的。然而,一般数据库的主键都是采用自增数作为主键的。因此,这里如果再用主键作为订单号就会存在问题。当然,除了这个情况外,还有许多其他情况。诸如,需要自动的生成一个随机的用户ID等。 考虑到以上的背景,我这篇将继上一篇《Java之Caesar与Vigenere实现》见  做一个唯一的伪随机数生成。作为对上一篇看上去挺简陋甚至不怎么安全的加密算法做一个具有现实意义的应用实现。话说,这两个坑爹的算法,如果加以合理的组合运用还是挺有用处的。其实大多数的安全问题,都是因为人为因素造成的和算法本身问题没太大的关系。

2  实现分析

众所周知,在计算机中,用算法实现的真实随机数是不可能存在的。当然,如果要从哲学角度考虑的话,那就是偶然和必然的问题了。就拿抛硬币来说,你可以把抛掷的结果看成是随机的,但是根据力学分析去分析每一个抛掷过程,你发现抛硬币的结果又不是随机的。

2.1  前期分析

扯那么多废话,再回到我们的主题上。如果要生成唯一随机ID, )的人,一定会觉得那样"古老"的手工密码,貌似没有什么实际可用的意义。但是,通过这篇文章的补充,或许会给你的思路一些拓展。我也希望你能有更多的想法和我们分享。我想,很多看似"无用"的东西,经过合理的运用,就会在不同的时代发挥其不同的作用。

相关内容