Created
July 10, 2017 16:33
-
-
Save juliends/c8b8d6ba9360079615479215f3926b35 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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