123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- //go:build windows
- package yu_phone
- import (
- _ "embed"
- yu_deflate "gogs.qqck.cn/s/tools/deflate"
- yu_fast "gogs.qqck.cn/s/tools/fast"
- yu_strconv "gogs.qqck.cn/s/tools/strconv"
- "strings"
- )
- var (
- //go:embed phone.dat
- data []byte
- phone2D [][]int
- addrArr []string
- ispArr []string
- )
- func init() {
- data = yu_deflate.DeflateDe(data)
- PrefSize := int(data[0]) | int(data[1])<<8 | int(data[2])<<16 | int(data[3])<<24
- descLength := int(data[8]) | int(data[9])<<8 | int(data[10])<<16 | int(data[11])<<24
- ispLength := int(data[12]) | int(data[13])<<8 | int(data[14])<<16 | int(data[15])<<24
- // PhoneSize := binary.LittleEndian.Uint32(data[4:8])
- // verNum := binary.LittleEndian.Uint32(data[16:20])
- headLength := 20
- startIndex := headLength + descLength + ispLength
- // Description array
- descString := yu_fast.B2S(data[headLength : headLength+descLength])
- addrArr = strings.Split(descString, "&")
- // ISP array
- ispString := yu_fast.B2S(data[headLength+descLength : headLength+descLength+ispLength])
- ispArr = strings.Split(ispString, "&")
- // Phone2D array
- phone2D = make([][]int, 200)
- for m := 0; m < PrefSize; m++ {
- i := m*7 + startIndex
- pref := int(data[i])
- index := int(data[i+1]) | int(data[i+2])<<8 | int(data[i+3])<<16 | int(data[i+4])<<24
- length := int(data[i+5]) | int(data[i+6])<<8
- phone2D[pref] = make([]int, 10000)
- for n := 0; n < length; n++ {
- p := startIndex + PrefSize*7 + (n+index)*4
- suff := int(data[p]) | int(data[p+1])<<8
- addrispIndex := int(data[p+2]) | int(data[p+3])<<8
- phone2D[pref][suff] = addrispIndex
- }
- }
- }
- type Info struct {
- // 区划:530400
- AreaCode string `json:"areacode"`
- // 城市:玉溪
- City string `json:"city"`
- // 区号:0877
- CityCode string `json:"citycode"`
- // 运营商:中国移动
- Isp string `json:"isp"`
- // 邮编:653100
- PostCode string `json:"postcode"`
- // 省份:云南
- Province string `json:"province"`
- }
- func (t *Info) IsVaild() bool {
- return t.Province != ""
- }
- // Query
- //
- // @Description: 查询手机号信息
- func Query(phone string) (info Info) {
- if len(phone) < 7 {
- return
- }
- prefix := phone[:3]
- suffix := phone[3:7]
- pref := yu_strconv.ParseInt(prefix)
- suff := yu_strconv.ParseInt(suffix)
- if pref >= len(phone2D) || suff >= len(phone2D[pref]) {
- return
- }
- addrispIndex := phone2D[pref][suff]
- if addrispIndex == 0 {
- return
- }
- j_info := strings.Split(addrArr[addrispIndex/100], "|")
- if len(j_info) != 5 {
- return
- }
- info.AreaCode, info.City, info.CityCode, info.PostCode, info.Province = j_info[4], j_info[1], j_info[3], j_info[2], j_info[0]
- info.Isp = ispArr[addrispIndex%100]
- return
- }
|