/
idcard.go
133 lines (119 loc) · 2.14 KB
/
idcard.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package helper
import (
"fmt"
"math/rand"
"strconv"
"time"
)
func GenerateIdCard() (ret string) {
areaCode := AreaCode[rand.Intn(len(AreaCode))] +
fmt.Sprintf("%0*d", 4, randInt(1, 9999))
birthday := RandDate().Format("20060102")
randomCode := fmt.Sprintf("%0*d", 3, randInt(0, 999))
prefix := areaCode + birthday + randomCode
ret = prefix + VerifyCode(prefix)
return
}
var AreaCode = []string{
"11",
"12",
"13",
"14",
"15",
"21",
"22",
"23",
"31",
"32",
"33",
"34",
"35",
"36",
"37",
"41",
"42",
"43",
"44",
"45",
"46",
"50",
"51",
"52",
"53",
"54",
"61",
"62",
"63",
"64",
"65",
"71",
"81",
"82",
"91",
}
var AreaCodeMap = map[string]string{
"11": "北京",
"12": "天津",
"13": "河北",
"14": "山西",
"15": "内蒙古",
"21": "辽宁",
"22": "吉林",
"23": "黑龙江",
"31": "上海",
"32": "江苏",
"33": "浙江",
"34": "安徽",
"35": "福建",
"36": "江西",
"37": "山东",
"41": "河南",
"42": "湖北",
"43": "湖南",
"44": "广东",
"45": "广西",
"46": "海南",
"50": "重庆",
"51": "四川",
"52": "贵州",
"53": "云南",
"54": "西藏",
"61": "陕西",
"62": "甘肃",
"63": "青海",
"64": "宁夏",
"65": "新疆",
"71": "台湾",
"81": "香港",
"82": "澳门",
"91": "国外",
}
// VerifyCode 通过给定的身份证号生成最后一位的 VerifyCode
func VerifyCode(cardId string) string {
tmp := 0
for i, v := range Wi {
t, _ := strconv.Atoi(string(cardId[i]))
tmp += t * v
}
return ValCodeArr[tmp%11]
}
var ValCodeArr = []string{
"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2",
}
var Wi = []int{
7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2,
}
// 指定范围随机 int
func randInt(min, max int) int {
return min + rand.Intn(max-min)
}
// 指定范围随机 int64
func randInt64(min, max int64) int64 {
return min + rand.Int63n(max-min)
}
// RandDate 返回随机时间,时间区间从 1970 年 ~ 2020 年
func RandDate() time.Time {
begin, _ := time.Parse("2006-01-02 15:04:05", "1970-01-01 00:00:00")
end, _ := time.Parse("2006-01-02 15:04:05", "2020-01-01 00:00:00")
return time.Unix(randInt64(begin.Unix(), end.Unix()), 0)
}