Class: Faker::Chinese::Bank
- Inherits:
-
Base
- Object
- Base
- Faker::Chinese::Bank
- Defined in:
- lib/faker_zextend/extend/chinese/bank_card.rb
Class Method Summary collapse
- .bank_card_no(bin_no = nil, len = 19) ⇒ Object
- .gen_bin_no(bin_no = nil) ⇒ Object
-
.gen_last_code(left_bank_card_no) ⇒ Object
1.3.1.
-
.gen_mid_no(len = 19) ⇒ Object
银行卡的中间位.
- .union_code ⇒ Object
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_code ⇒ Object
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 |