有个业务场景需要对身份证号做哈希,身份证号码最后一位可能是x,可以将身份证号码看作11进制的数据,转位10进制,有两种实现,一种从右到左:
def computehash(x):
res = 0
reversedx = reversed(x)
i = 0
for c in reversedx:
if c == 'x':
res += 10
else:
res += int(c) * pow(10, i)
i += 1
return res
复制代码
这种实现方式每次都需要计算pow,还有一种优化的算法,从左到右可以避免pow的计算:
def computehash(x):
res = 0
for c in x:
if c == 'x':
res = res * 10 + 10
else:
res = res * 10 + int(c)
return res
复制代码
golang语言版本实现:
func computehash(x string) int {
res := 0
for _,i := range x {
if i == 'x' {
res = res * 10 + 10
}else{
res = res * 10 + int(i - '0')
}
}
return res
}
复制代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END