package idcard import ( "fmt" "github.com/fonchain/fonchain-container/pkg/util/stime" "strconv" ) const DEF_IDCARD_LEN = 18 func GetNativePlace(idNum string) string { if idNum == "" { return "" } var area = map[int]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 provinceName = "" var ok bool var provinceNo, _ = strconv.Atoi(idNum[0:2]) if provinceNo == 0 { return "" } if provinceName, ok = area[provinceNo]; ok { return provinceName } else { return "" } } func GetAge(idNum string) int { if len(idNum) < 18 { return 0 } birthdayStr := idNum[6:14] fmt.Println("--------===--- idNum", idNum, "birthdayStr", birthdayStr) birthday, _ := stime.StringToTimeWithFormat(birthdayStr, stime.Format_NoSpacer_YMD) if birthday == nil { return 0 } return stime.GetAge(*birthday) } func Validate(idCard string) bool { idLen := len(idCard) if idLen != DEF_IDCARD_LEN { // lenght check failed return false } weight := []int{7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2} validate := []byte{'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'} sum := 0 for i := 0; i < len(weight); i++ { sum += weight[i] * int(byte(idCard[i])-'0') } m := sum % 11 return validate[m] == idCard[idLen-1] }