Class: IdValidator::Validator

Inherits:
Object
  • Object
show all
Includes:
Concern::Helper
Defined in:
lib/id_validator/validator.rb

Instance Method Summary collapse

Methods included from Concern::Helper

#check_address_code, #check_birthday_code, #check_is_abandoned, #check_order_code, #generate_address_code, #generate_birthday_code, #generate_check_bit, #generate_order_code, #get_address_info, #get_chinese_zodiac, #get_constellation, #get_id_argument

Instance Method Details

#fake_id(eighteen = true, address = nil, birthday = nil, sex = nil) ⇒ Object

构建虚假身份证信息



42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/id_validator/validator.rb', line 42

def fake_id(eighteen = true, address = nil, birthday = nil, sex = nil)
  address_code = generate_address_code(address)
  birthday_code = generate_birthday_code(birthday)
  order_code = generate_order_code(sex)

  return address_code + birthday_code[2..-1] + order_code unless eighteen

  body = address_code + birthday_code + order_code
  check_bit = generate_check_bit(body)

  body + check_bit
end

#get_info(id_card) ⇒ Object

获取身份证详细信息



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/id_validator/validator.rb', line 22

def get_info(id_card)
  return false unless is_valid?(id_card)

  code = get_id_argument(id_card)
  address_info = get_address_info(code[:address_code])

  {
    address_code: code[:address_code],
    address: IdValidator::Concern::Func.format_address_info(address_info),
    abandoned: check_is_abandoned(code[:address_code]),
    birthday_code: IdValidator::Concern::Func.format_birthday_code(code[:birthday_code]),
    constellation: get_constellation(code[:birthday_code]),
    chinese_zodiac: get_chinese_zodiac(code[:birthday_code]),
    sex: code[:order_code].to_i % 2,
    length: code[:type],
    check_bit: code[:check_bit]
  }
end

#is_valid?(id_card) ⇒ Boolean

检查身份证合法性

Returns:

  • (Boolean)


6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/id_validator/validator.rb', line 6

def is_valid?(id_card)
  code = get_id_argument(id_card)

  return false unless check_address_code(code[:address_code])
  return false unless check_birthday_code(code[:birthday_code])
  return false unless check_order_code(code[:order_code])

  return true if code[:type] == 15

  check_bit = generate_check_bit(code[:body])
  return false if check_bit.nil? || (code[:check_bit] != check_bit)

  true
end

#upgrade_id(id_card) ⇒ Object

身份证号升级(15位 升级为 18位)



56
57
58
59
60
61
62
63
# File 'lib/id_validator/validator.rb', line 56

def upgrade_id(id_card)
  return false unless (id_card.length == 15 && is_valid?(id_card))

  code = get_id_argument(id_card)
  body = code[:address_code] + code[:birthday_code] + code[:order_code]

  body + generate_check_bit(body)
end