phonedata 0.3.0.2108 → 0.4.0.2302

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f424f4aa4248920eacc5be569e3e3e1334f009e68366181743dd216f149017a1
4
- data.tar.gz: 6b4bde990e0e74d7c6bbd8a82b4a370fb596c17ad23e70bba2630b7b3be349f6
3
+ metadata.gz: 3ddac38cea34a21e3367dc7d5ed4c6b85a2eb4686ffeb1f0ba4e7ef03e292221
4
+ data.tar.gz: f9fcdb6cd1c66c2b1888b1625cec683c7603530a0b2ce3750c0584f1087c6a65
5
5
  SHA512:
6
- metadata.gz: '012939eb410fca4cdb52ac74c2665fec3b0433eee5cafe8c3e0b8a1e676d2ff2f301875a3e9a5eac3e97357f087ed17b0a6ca5fa4b653175ed25165ebdd55d32'
7
- data.tar.gz: eda28fe8d1285af92d0d21ce4619d6781656f3194eab9d534bca59f660087838631b8b00a50e2a32c5a2284b4ec439848876de90bf9d0511bce9fd781cb297f2
6
+ metadata.gz: a3bf3c86b67568f897bb07e40fc105c9af314ae0741f5140ad70bcd60b5374924eb068f124406bc0a0fc9329dbf9dda94d9fb7888fbd66ba6e80b9ed2e493808
7
+ data.tar.gz: 00c6931c52dffc29e3e9f93e44822b978eec7c39cff123ea5da51d68c8b6ce42e75dae3442beefb9d41933a73cc16a006dbabc9c0d49ecc22abf87b4854bcce5
data/README.md CHANGED
@@ -4,9 +4,9 @@
4
4
 
5
5
  参考 https://github.com/xluohome/phonedata 基于 ruby 实现
6
6
 
7
- - 归属地信息库文件大小:4,098,913 字节
8
- - 归属地信息库最后更新:2021 08
9
- - 手机号段记录条数:454336
7
+ - 归属地信息库文件大小:4,484,792 字节
8
+ - 归属地信息库最后更新:202302
9
+ - 手机号段记录条数:497191
10
10
 
11
11
  ### phone.dat 文件格式
12
12
 
data/data/phone.dat CHANGED
Binary file
@@ -1,3 +1,3 @@
1
1
  module Phonedata
2
- VERSION = "0.3.0.2108".freeze
2
+ VERSION = '0.4.0.2302'.freeze
3
3
  end
data/lib/phonedata.rb CHANGED
@@ -1,38 +1,37 @@
1
1
  require 'singleton'
2
- require "phonedata/version"
2
+ require 'phonedata/version'
3
3
 
4
4
  module Phonedata
5
5
  class Error < StandardError; end
6
-
7
-
6
+
8
7
  def self.find(phone_num)
9
- return Pd.instance.find(phone_num)
8
+ Pd.instance.find(phone_num)
10
9
  end
11
10
 
12
11
  def self.find_from_cli(phone_num)
13
- result = self.find(phone_num)
12
+ result = find(phone_num)
14
13
  result.to_s
15
14
  end
16
15
 
17
16
  def self.file_version
18
- return Pd.instance.file_version
17
+ Pd.instance.file_version
19
18
  end
20
19
 
21
20
  def self.total_record
22
- return Pd.instance.total_record
21
+ Pd.instance.total_record
23
22
  end
24
23
 
25
24
  def self.first_record_offset
26
- return Pd.instance.first_record_offset
25
+ Pd.instance.first_record_offset
27
26
  end
28
-
27
+
29
28
  INT_LEN = 4
30
29
  CHAR_LEN = 1
31
30
  HEAD_LENGTH = 8
32
31
  PHONE_INDEX_LENGTH = 9
33
- PHONE_DAT = "phone.dat"
32
+ PHONE_DAT = 'phone.dat'
34
33
 
35
- DICT = %w[nil 中国移动 中国联通 中国电信 中国电信虚拟运营商 中国联通虚拟运营商 中国移动虚拟运营商]
34
+ DICT = %w[nil 中国移动 中国联通 中国电信 中国电信虚拟运营商 中国联通虚拟运营商 中国移动虚拟运营商 中国广电 广电虚拟运营商]
36
35
 
37
36
  Result = Struct.new(:phone, :province, :city, :zipcode, :areazone, :card_type) do
38
37
  def to_s
@@ -42,38 +41,33 @@ module Phonedata
42
41
  class Pd
43
42
  include ::Singleton
44
43
 
45
- def initialize(dat_file_path = nil)
44
+ def initialize(dat_file_path = nil)
46
45
  df = dat_file_path
47
46
  if df.nil?
48
- dir = ENV['PHONE_DATA_DIR'] || File.join(File.dirname(__FILE__), "../data")
47
+ dir = ENV['PHONE_DATA_DIR'] || File.join(File.dirname(__FILE__), '../data')
49
48
  df = File.join("#{dir}/#{PHONE_DAT}")
50
- end
51
- f= File.open(df)
49
+ end
50
+ f = File.open(df)
52
51
  @bytes_content = f.read.bytes
53
52
  end
54
53
 
55
54
  def find(phone_num)
56
- if phone_num.size < 7 || phone_num.size > 11
57
- raise ArgumentError, " illegal phone length "
58
- end
55
+ raise ArgumentError, ' illegal phone length ' if phone_num.size < 7 || phone_num.size > 11
56
+
59
57
  searched_phone = phone_num[0...7].to_i
60
- #binary search
61
- min = 0
58
+ # binary search
59
+ min = 0
62
60
  max = total_record
63
61
  while min <= max
64
62
  mid = (min + max) / 2
65
63
  current_offset = (first_record_offset + mid * PHONE_INDEX_LENGTH)
66
- if current_offset >= _total_len
67
- break
68
- end
69
- #
70
- record_offset_start_idx = current_offset+INT_LEN
71
- card_type_start_idx = current_offset+INT_LEN*2
72
- #
64
+ break if current_offset >= _total_len
65
+
66
+ record_offset_start_idx = current_offset + INT_LEN
67
+ card_type_start_idx = current_offset + INT_LEN * 2
73
68
  cur_phone_seg = _get4(@bytes_content[current_offset...record_offset_start_idx])
74
69
  record_offset = _get4(@bytes_content[record_offset_start_idx...card_type_start_idx])
75
70
  card_type = @bytes_content[card_type_start_idx]
76
- #
77
71
  if searched_phone > cur_phone_seg
78
72
  min = mid + 1
79
73
  elsif searched_phone < cur_phone_seg
@@ -81,18 +75,17 @@ module Phonedata
81
75
  else
82
76
  sub_arr = @bytes_content[record_offset...first_record_offset]
83
77
  full_data_arr = sub_arr[0...sub_arr.index(0)]
84
- full_data_str = full_data_arr.pack("C*").force_encoding('UTF-8')
85
- result = full_data_str.split("|")
86
-
78
+ full_data_str = full_data_arr.pack('C*').force_encoding('UTF-8')
79
+ result = full_data_str.split('|')
80
+
87
81
  return Result.new(phone_num, result[0], result[1], result[2], result[3], DICT[card_type])
88
82
  end
89
- #
90
83
  end
91
- return Result.new(phone_num, nil, nil, nil, nil, nil)
84
+ Result.new(phone_num, nil, nil, nil, nil, nil)
92
85
  end
93
86
 
94
- def file_version
95
- @bytes_content[0...INT_LEN].pack("C*")
87
+ def file_version
88
+ @bytes_content[0...INT_LEN].pack('C*')
96
89
  end
97
90
 
98
91
  def first_record_offset
@@ -105,6 +98,7 @@ module Phonedata
105
98
  end
106
99
 
107
100
  private
101
+
108
102
  def _total_len
109
103
  @bytes_content.size
110
104
  end
@@ -114,7 +108,7 @@ module Phonedata
114
108
  0
115
109
  else
116
110
  byte_arr[0] | byte_arr[1] << 8 | byte_arr[2] << 16 | byte_arr[3] << 24
117
- end
111
+ end
118
112
  end
119
113
  end
120
114
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phonedata
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0.2108
4
+ version: 0.4.0.2302
5
5
  platform: ruby
6
6
  authors:
7
7
  - Forwaard
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-19 00:00:00.000000000 Z
11
+ date: 2023-04-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec