验证身份证的校验位

2020-03-29  本文已影响0人  CodingCode

验证身份证的第18位校验位是否有效:

func verifyID(id string) error {
    if len(id) != 18 {
        return fmt.Errorf("id must has length 18")
    }

    wi := []int {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}
    ai := []rune{'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
    sum := 0
    for i:= 0; i<len(id) - 1; i++ {
        sum +=  int(([]rune(id))[i] - '0') * wi[i]
    }

    if unicode.ToUpper(([]rune(id))[len(id) - 1]) != ai[sum % 11] {
        return fmt.Errorf("id verifiy failure")
    }
    return nil
}
上一篇下一篇

猜你喜欢

热点阅读