|
- package idvalidator
-
- import (
- "id-validator/data"
- "strconv"
- "strings"
- )
-
- // 检查地址码
- func GetAddressInfo(addressCode string, birthdayCode string) map[string]string {
- addressInfo := map[string]string{
- "province": "",
- "city": "",
- "district": "",
- }
-
- // 省级信息
- addressInfo["province"] = GetAddress(Substr(addressCode, 0, 2)+"0000", birthdayCode)
-
- // 用于判断是否是港澳台居民居住证(8字开头)
- firstCharacter := Substr(addressCode, 0, 1)
- // 港澳台居民居住证无市级、县级信息
- if firstCharacter == "8" {
- return addressInfo
- }
-
- // 市级信息
- addressInfo["city"] = GetAddress(Substr(addressCode, 0, 4)+"00", birthdayCode)
-
- // 县级信息
- addressInfo["district"] = GetAddress(addressCode, birthdayCode)
-
- return addressInfo
- }
-
- // 获取省市区地址码
- func GetAddress(addressCode string, birthdayCode string) string {
- address := ""
- addressCodeInt, _ := strconv.Atoi(addressCode)
- year, _ := strconv.Atoi(Substr(birthdayCode, 0, 4))
- for key, val := range data.AddressCodeTimeline[addressCodeInt] {
- // if len(val) == 0 {
- // continue
- // }
- startYear, _ := strconv.Atoi(val["start_year"])
- if (key == 0 && year < startYear) || year >= startYear {
- address = val["address"]
- }
- }
-
- return address
- }
-
- // 获取星座信息
- func GetConstellation(birthdayCode string) string {
- monthStr := Substr(birthdayCode, 4, 6)
- dayStr := Substr(birthdayCode, 6, 8)
- month, _ := strconv.Atoi(monthStr)
- day, _ := strconv.Atoi(dayStr)
- startDate := data.Constellation[month]["start_date"]
- startDay, _ := strconv.Atoi(strings.Split(startDate, "-")[1])
- if day >= startDay {
- return data.Constellation[month]["name"]
- }
-
- tmpMonth := month - 1
- if month == 1 {
- tmpMonth = 12
- }
-
- return data.Constellation[tmpMonth]["name"]
- }
-
- // 获取生肖信息
- func GetChineseZodiac(birthdayCode string) string {
- // 子鼠
- start := 1900
- end, _ := strconv.Atoi(Substr(birthdayCode, 0, 4))
- key := (end - start) % 12
-
- return data.ChineseZodiac[key]
- }
-
- // Substr 截取字符串
- func Substr(source string, start int, end int) string {
- r := []rune(source)
- length := len(r)
-
- if start < 0 || end > length || start > end {
- return ""
- }
-
- if start == 0 && end == length {
- return source
- }
-
- return string(r[start:end])
- }
|