美文网首页
根据身份证号码前17位计算出最后一位

根据身份证号码前17位计算出最后一位

作者: MrBryan | 来源:发表于2021-06-17 16:57 被阅读0次

    背景:
    当你的孩子出生后,你知道父母的身份证编号,想知道孩子的身份证怎么办?
    通过golang 计算出孩子最后一个数字,前面的数字有规律
    比如
    父亲的身份证是:
    110102198505191114
    母亲的身份证是:
    110102198706102341

    假设还在出生日期为 20190330 男孩 跟随父亲户口
    假设20190330当天出生的孩子不超过5个
    那么孩子的身份证号码可能为如下几个
    110102201903301117
    110102201903301133
    11010220190330115X
    110102201903301176
    110102201903301192

    package main
    
    import (
        "fmt"
        "strconv"
    )
    
    func main() {
        var prc string
        for {
            fmt.Println("")
            fmt.Println("请输入身份证号码的前17位:")
            if _, err := fmt.Scanf("%d", &prc); err != nil {
                fmt.Printf("%s\n", err)
                return
            }
            if prc == "exit" {
                fmt.Println("退出成功~")
                return
            } else if 17 == len(prc) {
                checkPRC(prc)
            } else {
                fmt.Printf("你输入身份证的长度不够【%q】,请重新输入.\n", prc)
            }
            fmt.Println("输入【exit】程序退出~")
        }
    }
    
    func checkPRC(prc string) {
        sum := 0
        factor := [17]int{7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}
        for k, v := range prc {
            n, _ := strconv.Atoi(string(v))
            sum += n * factor[k]
        }
        sum = sum % 11
        mapping := map[int]string{
            0:  "1",
            1:  "0",
            2:  "X",
            3:  "9",
            4:  "8",
            5:  "7",
            6:  "6",
            7:  "5",
            8:  "4",
            9:  "3",
            10: "2",
        }
        fmt.Println(mapping[1])
    
        if lastPlace, ok := mapping[sum]; ok {
            fmt.Printf("身份证号码前17位【%s】对应的最后一位是【%s】", prc, lastPlace)
            fmt.Println()
            fmt.Printf("完整的身份证号码为:【%s%s】", prc, lastPlace)
    
        } else {
            fmt.Printf("系统异常,身份证号码%s", prc)
        }
        fmt.Println()
    
        return
    }
    
    

    相关文章

      网友评论

          本文标题:根据身份证号码前17位计算出最后一位

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