class NIKParser

Public Instance Methods

parse(nik) click to toggle source
# File lib/nik_parser.rb, line 5
def parse(nik)
  return nil if nik.length != 16

  province_code = nik[0..1]
  regency_code  = nik[0..3]
  district_code = nik[0..5]

  file = File.open "data/indonesian-region.json"
  data = JSON.load file

  province = data["province"][province_code]
  regency = data["regency"][regency_code]
  district = data["district"][district_code]

  is_female = nik[6..7].to_i > 40
  sex = is_female ? "F" : "M"

  current_year = DateTime.now.year.to_s[2,2].to_i
  nik_year = nik[10..11].to_i
  date = is_female ? (nik[6..7].to_i - 40) : nik[6..7]
  month = nik[8..9]
  year = nik_year < current_year ? "20#{nik_year}" : "19#{nik_year}"

  uniqcode = nik[12..16]

  nik = {
    "nik": nik,
    "region": {
      "province": province,
      "regency": regency,
      "district": district
    },
    "sex": sex,
    "birth": {
      "date": date,
      "month": month,
      "year": year
    },
    "uniqcode": uniqcode
  }

  return nik
end