一个身份证号码共18位,前17位表示地区、生日和流水号,而第18位是一个校验位。
下面是一段随机生成身份证号码的Groovy代码:
def id = []
def rand = new Random()
17.times { id << rand.nextInt(10) }
def s = 0;
def w = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]
def v = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]
id.eachWithIndex { n, i -> s += n * w[i]; print n }
println v[s % 11]
下面是一段更精简但是更难读的代码:
def rand = new Random()
def w = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
def v = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]
def s = w.sum { def i = rand.nextInt(10); print i; i * it }
println v[s % 11]