package Ġcom . ra q un . o yst er . card Ċ Ċ import Ġcom . ra q un . o yst er . formatter . A mex Formatter Ċ import Ġcom . ra q un . o yst er . formatter . Default Formatter Ċ import Ġcom . ra q un . o yst er . formatter . Din ners Club Formatter Ċ import Ġcom . ra q un . o yst er . formatter . Formatter Ċ Ċ /* Ċ Ġ* ĠRegex Ġstrings Ġof ĠC ards Ġfor Ġvalidation Ċ Ġ*/ Ċ const Ġval ĠREG EX _ DEFAULT _ CARD Ġ= Ġ"^ [ 0 - 9 ]{ 1 6 }\ $" Ċ const Ġval ĠREG EX _ VIS A Ġ= Ġ"^ 4 [ 0 - 9 ]{ 1 2 }( ?: [ 0 - 9 ]{ 3 }) ?\ $" Ċ const Ġval ĠREG EX _ MASTER _ CARD Ġ= Ġ"^ 5 [ 1 - 5 ][ 0 - 9 ]{ 1 4 }\ $" Ċ const Ġval ĠREG EX _ AME X Ġ= Ġ"^ 3 [ 4 7 ][ 0 - 9 ]{ 1 3 }\ $" Ċ const Ġval ĠREG EX _ D IN N ERS _ CL UB Ġ= Ġ"^ 3 (?: 0 [ 0 - 5 ] |[ 6 8 ][ 0 - 9 ])[ 0 - 9 ]{ 1 1 }\ $" Ċ const Ġval ĠREG EX _ DIS COVER Ġ= Ġ"^ 6 (?: 0 1 1 | 5 [ 0 - 9 ]{ 2 }) [ 0 - 9 ]{ 1 2 }\ $" Ċ const Ġval ĠREG EX _ J CB Ġ= Ġ"^ (?: 2 1 3 1 | 1 8 0 0 | 3 5 \\\\ d { 3 }) \\\\ d { 1 1 }\ $" Ċ Ċ /* Ċ Ġ* ĠRegex Ġstrings Ġof ĠC ards Ġfor Ġtype Ġrecognition Ċ Ġ*/ Ċ const Ġval ĠTYPE _ REGEX _ VIS A Ġ= Ġ"^ [ 4 ]+ .* " Ċ const Ġval ĠTYPE _ REGEX _ MASTER _ CARD Ġ= Ġ"^ [ 5 ]+ .* " Ċ const Ġval ĠTYPE _ REGEX _ AME X Ġ= Ġ"^ 3 [ 4 7 ]+ .* " Ċ const Ġval ĠTYPE _ REGEX _ D IN N ERS _ CL UB Ġ= Ġ"^ 3 (?: 0 [ 0 - 5 ] |[ 6 8 ][ 0 - 9 ])+ .* " Ċ const Ġval ĠTYPE _ REGEX _ DIS COVER Ġ= Ġ"^ 6 (?: 0 1 1 | 5 [ 0 - 9 ]{ 2 }) + .* " Ċ const Ġval ĠTYPE _ REGEX _ J CB Ġ= Ġ"^ 3 5 \\\\ d { 3 } + .* " Ċ const Ġval ĠTYPE _ REGEX _ J CB 1 5 Ġ= Ġ"^ (?: 2 1 3 1 | 1 8 0 0 )+ .* " Ċ Ċ sealed Ġclass ĠCredit Card Ġconstructor ( ĊĠĠĠ Ġval Ġid : ĠInt , ĊĠĠĠ Ġval Ġname : ĠString , ĊĠĠĠ Ġval Ġformatter : ĠFormatter , ĊĠĠĠ Ġval Ġvalidation Regex : ĠString , ĊĠĠĠ Ġval Ġtype Regex : ĠString , ĊĠĠĠ Ġval Ġlen : ĠInt Ċ ) Ġ{ ĊĠĠĠ Ġclass ĠUnknown Card Ġ: ĠCredit Card ( ĊĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠ Ġ" Unknown ", ĊĠĠĠĠĠĠĠ ĠDefault Formatter (), ĊĠĠĠĠĠĠĠ ĠREG EX _ DEFAULT _ CARD , ĊĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠ 1 6 ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġclass ĠVis a Ġ: ĠCredit Card ( ĊĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠ Ġ" Vis a ", ĊĠĠĠĠĠĠĠ ĠDefault Formatter (), ĊĠĠĠĠĠĠĠ ĠREG EX _ VIS A , ĊĠĠĠĠĠĠĠ ĠTYPE _ REGEX _ VIS A , ĊĠĠĠĠĠĠĠĠ 1 3 ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġclass ĠMaster Card Ġ: ĠCredit Card ( ĊĠĠĠĠĠĠĠĠ 2 , ĊĠĠĠĠĠĠĠ Ġ" Master ĠCard ", ĊĠĠĠĠĠĠĠ ĠDefault Formatter (), ĊĠĠĠĠĠĠĠ ĠREG EX _ MASTER _ CARD , ĊĠĠĠĠĠĠĠ ĠTYPE _ REGEX _ MASTER _ CARD , ĊĠĠĠĠĠĠĠĠ 1 6 ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġclass ĠA mex Ġ: ĠCredit Card ( ĊĠĠĠĠĠĠĠĠ 3 , ĊĠĠĠĠĠĠĠ Ġ" American ĠExpress ", ĊĠĠĠĠĠĠĠ ĠA mex Formatter (), ĊĠĠĠĠĠĠĠ ĠREG EX _ AME X , ĊĠĠĠĠĠĠĠ ĠTYPE _ REGEX _ AME X , ĊĠĠĠĠĠĠĠĠ 1 5 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġclass ĠD in ners Club Ġ: ĠCredit Card ( ĊĠĠĠĠĠĠĠĠ 4 , ĊĠĠĠĠĠĠĠ Ġ" Din ners ĠClub ", ĊĠĠĠĠĠĠĠ ĠD in ners Club Formatter (), ĊĠĠĠĠĠĠĠ ĠREG EX _ D IN N ERS _ CL UB , ĊĠĠĠĠĠĠĠ ĠTYPE _ REGEX _ D IN N ERS _ CL UB , ĊĠĠĠĠĠĠĠĠ 1 4 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġclass ĠDis cover Ġ: ĠCredit Card ( ĊĠĠĠĠĠĠĠĠ 5 , ĊĠĠĠĠĠĠĠ Ġ" Discover ", ĊĠĠĠĠĠĠĠ ĠDefault Formatter (), ĊĠĠĠĠĠĠĠ ĠREG EX _ DIS COVER , ĊĠĠĠĠĠĠĠ ĠTYPE _ REGEX _ DIS COVER , ĊĠĠĠĠĠĠĠĠ 1 6 ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġclass ĠJ CB ( ĊĠĠĠĠĠĠĠ Ġvalidation Regex : ĠString , ĊĠĠĠĠĠĠĠ Ġtype Regex : ĠString , ĊĠĠĠĠĠĠĠ Ġlen : ĠInt ĊĠĠĠ Ġ) Ġ: ĠCredit Card ( ĊĠĠĠĠĠĠĠĠ 6 , ĊĠĠĠĠĠĠĠ Ġ" J CB ", ĊĠĠĠĠĠĠĠ ĠDefault Formatter (), ĊĠĠĠĠĠĠĠ Ġvalidation Regex , ĊĠĠĠĠĠĠĠ Ġtype Regex , ĊĠĠĠĠĠĠĠ Ġlen ĊĠĠĠ Ġ) Ċ } ĊĊĊĊ