package Ġno . nav . pens jon . v tp . test mode ll . id enter Ċ Ċ import Ġno . nav . pens jon . v tp . test mode ll . enums . Ident Type Ċ import Ġno . nav . pens jon . v tp . test mode ll . enums . K jon n Ċ import Ġno . nav . pens jon . v tp . test mode ll . enums . K jon n . KV IN NE Ċ import Ġno . nav . pens jon . v tp . test mode ll . enums . K jon n . MAN N Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . time . LocalDate Ċ import Ġjava . util .* Ċ Ċ class ĠF o ed se ls nummer Generator ( ĊĠĠĠ Ġprivate Ġval Ġk jon n : ĠK jon n , ĊĠĠĠ Ġprivate Ġval Ġident Type : ĠIdent Type , ĊĠĠĠ Ġprivate Ġval Ġf od sel sd ato : ĠLocalDate Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Fo ed se ls nummer Generator :: class . java ) ĊĊĠĠĠ Ġfun Ġgenerate (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrandom Ġ= ĠRandom () ĊĠĠĠĠĠĠĠ Ġvar Ġday Ġ= ĠString . format ("% 0 2 d ", Ġf od sel sd ato . day OfMonth ) ĊĠĠĠĠĠĠĠ Ġval Ġmonth Ġ= ĠString . format ("% 0 2 d ", Ġf od sel sd ato . month Value ) ĊĠĠĠĠĠĠĠ Ġval Ġyear Ġ= Ġf od sel sd ato . year . toString (). substring ( 2 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbirth Number Ġ= Ġwhen Ġ( k jon n ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠK V IN NE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 Ġ+ Ġrandom . nextInt ( 9 0 0 Ġ/ Ġ 2 ) Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMAN N Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 Ġ+ Ġrandom . nextInt ( 9 0 0 Ġ/ Ġ 2 ) Ġ* Ġ 2 Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( ident Type Ġ== ĠIdent Type . DN R ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġday Ġ= Ġ( day . toInt () Ġ+ Ġ 4 0 ). toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfull Year Ġ= Ġf od sel sd ato . year ĊĠĠĠĠĠĠĠ Ġif Ġ( between Exclusive ( full Year , Ġ 1 8 5 4 , Ġ 1 8 9 9 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! between Exclusive ( birth Number , Ġ 5 0 0 , Ġ 7 4 9 )) Ġreturn Ġgenerate () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( between Exclusive ( full Year , Ġ 1 9 0 0 , Ġ 1 9 9 9 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! between Exclusive ( birth Number , Ġ 0 , Ġ 4 9 9 )) Ġreturn Ġgenerate () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( between Exclusive ( full Year , Ġ 1 9 4 0 , Ġ 1 9 9 9 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! between Exclusive ( birth Number , Ġ 9 0 0 , Ġ 9 9 9 )) Ġreturn Ġgenerate () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( between Exclusive ( full Year , Ġ 2 0 0 0 , Ġ 2 0 3 9 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! between Exclusive ( birth Number , Ġ 5 0 0 , Ġ 9 9 9 )) Ġreturn Ġgenerate () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" K un ne Ġik ke Ġident if is ere Ġf Ã¸ d se ls num mers er ie ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġwithout Control Digits Ġ= Ġday Ġ+ Ġmonth Ġ+ Ġyear Ġ+ Ġbirth Number ĊĠĠĠĠĠĠĠ Ġval Ġd 1 Ġ= Ġget Digit ( without Control Digits , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġd 2 Ġ= Ġget Digit ( without Control Digits , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġm 1 Ġ= Ġget Digit ( without Control Digits , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġm 2 Ġ= Ġget Digit ( without Control Digits , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġy 1 Ġ= Ġget Digit ( without Control Digits , Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġy 2 Ġ= Ġget Digit ( without Control Digits , Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġval Ġi 1 Ġ= Ġget Digit ( without Control Digits , Ġ 6 ) ĊĠĠĠĠĠĠĠ Ġval Ġi 2 Ġ= Ġget Digit ( without Control Digits , Ġ 7 ) ĊĠĠĠĠĠĠĠ Ġval Ġi 3 Ġ= Ġget Digit ( without Control Digits , Ġ 8 ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġcontrol 1 Ġ= Ġ 1 1 Ġ- Ġ( 3 Ġ* Ġd 1 Ġ+ Ġ 7 Ġ* Ġd 2 Ġ+ Ġ 6 Ġ* Ġm 1 Ġ+ Ġ 1 Ġ* Ġm 2 Ġ+ Ġ 8 Ġ* Ġy 1 Ġ+ Ġ 9 Ġ* Ġy 2 Ġ+ Ġ 4 Ġ* Ġi 1 Ġ+ Ġ 5 Ġ* Ġi 2 Ġ+ Ġ 2 Ġ* Ġi 3 ) Ġ% Ġ 1 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( control 1 Ġ== Ġ 1 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontrol 1 Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġcontrol 2 Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 1 Ġ- Ġ( 5 Ġ* Ġd 1 Ġ+ Ġ 4 Ġ* Ġd 2 Ġ+ Ġ 3 Ġ* Ġm 1 Ġ+ Ġ 2 Ġ* Ġm 2 Ġ+ Ġ 7 Ġ* Ġy 1 Ġ+ Ġ 6 Ġ* Ġy 2 Ġ+ Ġ 5 Ġ* Ġi 1 Ġ+ Ġ 4 Ġ* Ġi 2 Ġ+ Ġ 3 Ġ* Ġi 3 Ġ+ Ġ 2 Ġ* Ġcontrol 1 ) Ġ% Ġ 1 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( control 2 Ġ== Ġ 1 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontrol 2 Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( control 1 Ġ== Ġ 1 0 Ġ|| Ġcontrol 2 Ġ== Ġ 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠInvalid Ġnumber . ĠGet Ġa Ġnew Ġone ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġwithout Control Digits Ġ+ Ġcontrol 1 Ġ+ Ġcontrol 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Digit ( text : ĠString , Ġindex : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtext . substring ( index , Ġindex Ġ+ Ġ 1 ). toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbetween Exclusive ( x : ĠInt , Ġmin : ĠInt , Ġmax : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġx Ġ> Ġmin Ġ&& Ġx Ġ< Ġmax ĊĠĠĠ Ġ} Ċ } Ċ