美文网首页
GO检查身份证号

GO检查身份证号

作者: 秀秀小虞儿 | 来源:发表于2022-04-13 14:31 被阅读0次
func IsIDCard(id string) bool {
    id = strings.ToUpper(id)
    if len(id) != 15 && len(id) != 18 {
        return false
    }
    r := regexp.MustCompile("(\\d{15})|(\\d{17}([0-9]|X))")
    if !r.MatchString(id) {
        return false
    }
    if len(id) == 15 {
        tm2, _ := time.Parse("01/02/2006", string([]byte(id)[8:10])+"/"+string([]byte(id)[10:12])+"/"+"19"+string([]byte(id)[6:8]))
        if tm2.Unix() <= 0 {
            return false
        }
        return true
    } else {
        tm2, _ := time.Parse("01/02/2006", string([]byte(id)[10:12])+"/"+string([]byte(id)[12:14])+"/"+string([]byte(id)[6:10]))
        if tm2.Unix() <= 0 {
            return false
        }
        // 检验18位身份证的校验码是否正确。
        // 校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
        arrInt := []int{7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}
        arrCh := []string{"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"}
        sign := 0
        for k, v := range arrInt {
            intTemp, _ := strconv.Atoi(string([]byte(id)[k : k+1]))
            sign += intTemp * v
        }
        n := sign % 11
        valNum := arrCh[n]
        if valNum != string([]byte(id)[17:18]) {
            return false
        }
        return true
    }
}

相关文章

网友评论

      本文标题:GO检查身份证号

      本文链接:https://www.haomeiwen.com/subject/abrasrtx.html