Skip to content

Instantly share code, notes, and snippets.

@juliends
Created July 10, 2017 16:33
Show Gist options
  • Save juliends/c8b8d6ba9360079615479215f3926b35 to your computer and use it in GitHub Desktop.
Save juliends/c8b8d6ba9360079615479215f3926b35 to your computer and use it in GitHub Desktop.
# Rubular regexp pour créer des groupes de matching
# Appeller la methode match afin de constituer les groupes
# branche afin de déterminer le genre
# Mois en lettres, hash => clé mois, valeur => mois en lettres
require"date"
SSN_FORMAT = /^(?<sexe>1|2)(?<year>\d{2})(?<month>\d{2})(?<state>\d{2})(\d{6})(?<key>\d{2})$/
DPT = {
"75" => "Paris",
"76" => "Seine Maritime"
}
def ssn_info(ssn)
#Return => "a man, born in March, 1986 in Paris."
ssn = ssn.gsub(" ","")
match_data = ssn.match(SSN_FORMAT)
match_data[:sexe] == "1" ? var_sexe = "a man" : var_sexe = "a woman"
var_month = Date::MONTHNAMES[match_data[:month].to_i]
var_year = match_data[:year]
var_dpt = DPT[match_data[:state]]
var_key = match_data[:key].to_i
number = ssn[0..12].to_i
expected_key = 97 - (number % 97)
if var_key == expected_key
return "#{var_sexe}, born in #{var_month}, 19#{var_year} in #{var_dpt}."
else
return "Invalid card number"
end
end
puts ssn_info("186037510803191")
puts ssn_info("286107511451175")
puts ssn_info("1 84 12 76 451 089 46")
# SSN numbers:
# => 186037510803191
# => 286107511451175
# => 1 84 12 76 451 089 46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment