lib/banktools-se/bankgiro.rb in banktools-se-0.5.0 vs lib/banktools-se/bankgiro.rb in banktools-se-0.6.0
- old
+ new
@@ -1,45 +1,19 @@
# http://sv.wikipedia.org/wiki/Bankgirot#Bankgironummer
+require "banktools-se/bankgiro/ocr"
+
module BankTools
module SE
class Bankgiro
- class OverlongOCR < StandardError; end
- class BadCheckDigit < StandardError; end
-
attr_reader :number
- # http://www.bgc.se/upload/Gemensamt/Trycksaker/Manualer/BG6070.pdf section 5.2
def self.number_to_ocr(number, opts = {})
- add_length_digit = opts.fetch(:length_digit, false)
- pad = opts.fetch(:pad, nil)
-
- number = number.to_s
-
- if pad
- number += pad
- end
-
- if add_length_digit
- # Adding 2: 1 length digit, 1 check digit
- number += ((number.length + 2) % 10).to_s
- end
-
- number_with_ocr = number.to_s + Utils.luhn_checksum(number).to_s
- raise OverlongOCR, "Bankgiro OCR must be 2-25 characters" if number_with_ocr.length > 25
- number_with_ocr
+ OCR.number_to_ocr(number, opts)
end
def self.number_from_ocr(number, opts = {})
- strip_length_digit = opts.fetch(:length_digit, false)
- strip_padding = opts.fetch(:pad, false)
-
- raise BadCheckDigit unless Utils.valid_luhn?(number)
-
- number = number.to_s
- number.slice!(-2) if strip_length_digit
- number.slice!(-strip_padding.length.succ..-2) if strip_padding
- number.chop
+ OCR.number_from_ocr(number, opts)
end
def initialize(number)
@number = number
end