身份证哈希算法

1,207 阅读1分钟

有个业务场景需要对身份证号做哈希,身份证号码最后一位可能是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
}