Class: Faker::Chinese::Bank

Inherits:
Base
  • Object
show all
Defined in:
lib/faker_zextend/extend/chinese/bank_card.rb

Class Method Summary collapse

Class Method Details

.bank_card_no(bin_no = nil, len = 19) ⇒ Object



65
66
67
68
69
# File 'lib/faker_zextend/extend/chinese/bank_card.rb', line 65

def bank_card_no(bin_no = nil, len=19)
  
  left_card_no = gen_bin_no(bin_no) + gen_mid_no(len)
  return left_card_no + gen_last_code(left_card_no)
end

.gen_bin_no(bin_no = nil) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/faker_zextend/extend/chinese/bank_card.rb', line 9

def gen_bin_no(bin_no = nil)

  bank_to_bin =  
  {
    "工商银行": "623062",
    "中国银行": "621343",
    "建设银行": "622676",
    "招商银行": "410062",
    "中信银行": "433680",
    "光大银行": "622663",
    "民生银行": "622622",
    "交通银行": "621335",
    "平安银行": "622989",
    "农业银行": "622848"
  }
  bins = bank_to_bin.values
  if bin_no
    return bin_no
  else
    return bins.sample
  end
end

.gen_last_code(left_bank_card_no) ⇒ Object

1.3.1. 从x的右边第1个数字开始,每隔一位乘以2 1.3.2. 把第一步中获得的乘积各位数相加得sum1 1.3.3. x中未乘2的各位数相加得sum2 1.3.4. sum=sum1+sum2,sum对10取模后得到m 1.3.5. 若n为0,则校验码为0,其余则为对应的10-n,即n对10得补数



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/faker_zextend/extend/chinese/bank_card.rb', line 47

def gen_last_code(left_bank_card_no)
  sum = 0

  left_bank_card_no.chars.reverse.each_with_index do |c, i|
    if i % 2 == 0
      sum = sum + (c.to_i * 2).to_s.chars.map{|x| x.to_i}.sum
    else
      sum = sum + c.to_i
    end
  end
  if sum % 10 == 0
    return '0'
  else
    return (10 - sum % 10).to_s
  end
end

.gen_mid_no(len = 19) ⇒ Object

银行卡的中间位



33
34
35
36
37
38
39
# File 'lib/faker_zextend/extend/chinese/bank_card.rb', line 33

def gen_mid_no(len = 19)
  mid_no = ""
  (len - 6 -1).times do |i|
    mid_no << rand(10).to_s
  end
  return mid_no
end

.union_codeObject



72
73
74
75
# File 'lib/faker_zextend/extend/chinese/bank_card.rb', line 72

def union_code
  @all_union_code ||= JSON.parse(::File.read(::File.join(__dir__, "bank_union_code.json")))
  @all_union_code.sample
end