背景:
当你的孩子出生后,你知道父母的身份证编号,想知道孩子的身份证怎么办?
通过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
}
网友评论