Module: Basho::CodeValidator
- Defined in:
- lib/basho/code_validator.rb
Overview
JIS X 0401 チェックディジットによる6桁自治体コードの検証。
Constant Summary collapse
- CHECK_DIGITS_INDEX =
チェックディジットの桁位置(0始まり)
5- CHECK_BASE =
モジュラス演算の基数
11- PREFECTURE_RANGE =
有効な都道府県コード範囲
(1..47)
Class Method Summary collapse
-
.compute_check_digit(code) ⇒ Integer
チェックディジットを計算する。.
-
.valid?(code) ⇒ Boolean
自治体コードの形式とチェックディジットを検証する。.
Class Method Details
.compute_check_digit(code) ⇒ Integer
チェックディジットを計算する。
34 35 36 37 38 39 40 41 42 |
# File 'lib/basho/code_validator.rb', line 34 def compute_check_digit(code) sub_total = code.chars .take(CHECK_DIGITS_INDEX) .map.with_index { |digit, i| digit.to_i * (CHECK_DIGITS_INDEX - i + 1) } .sum candidate = (CHECK_BASE - (sub_total % CHECK_BASE)) % 10 sub_total >= CHECK_BASE ? candidate : CHECK_BASE - sub_total end |
.valid?(code) ⇒ Boolean
自治体コードの形式とチェックディジットを検証する。
23 24 25 26 27 28 |
# File 'lib/basho/code_validator.rb', line 23 def valid?(code) return false unless code.is_a?(String) && code.match?(/\A\d{6}\z/) return false unless PREFECTURE_RANGE.cover?(code[0..1].to_i) code[CHECK_DIGITS_INDEX].to_i == compute_check_digit(code) end |