Skip to content

Commit

Permalink
Legger til støtte for Dolly FNR og DNR
Browse files Browse the repository at this point in the history
  • Loading branch information
ramrock93 committed Jan 31, 2024
1 parent b41763d commit 8b55d9d
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ class Personidentifikator(private val ident: String) {

val TEST_NORGE_GRENSEVERDI = 8 //Syntetisk bruker fra TestNorge som har tredje siffer + 8
val D_NUMMER_GRENSEVERDI = 4 //D-nummer har første siffer + 4
val DOLLY_FNR_GRENSEVERDI = 40 //FNR fra Dolly har + 40 på måned

val vekttallProviderFnr1: (Int) -> Int = { arrayOf(3, 7, 6, 1, 8, 9, 4, 5, 2).reversedArray()[it] }
val vekttallProviderFnr2: (Int) -> Int = { arrayOf(5, 4, 3, 2, 7, 6, 5, 4, 3, 2).reversedArray()[it] }
Expand All @@ -34,6 +35,8 @@ class Personidentifikator(private val ident: String) {
type = when {
erTestNorgeDNummer() -> Type.TEST_NORGE_DNR
erTestNorgeFNummer() -> Type.TEST_NORGE_FNR
erDollyDnr() -> Type.DOLLY_DNR
erDollyFnr() -> Type.DOLLY_FNR
erDNummer() -> Type.DNR
else -> Type.FNR
}
Expand Down Expand Up @@ -123,6 +126,18 @@ class Personidentifikator(private val ident: String) {
fødselsdatoFormat.parse(ident.take(6))
true
}

Type.DOLLY_FNR -> {
val tilVanligFraDollyFNR = ident.tilVanligFraDollyFNR()
fødselsdatoFormat.parse(tilVanligFraDollyFNR.take(6))
true
}

Type.DOLLY_DNR -> {
val tilVanligFraDollyDNR = ident.tilVanligFraDollyDNR()
fødselsdatoFormat.parse(tilVanligFraDollyDNR.take(6))
true
}
}
} catch (cause: Throwable) {
logger.warn("Feilet med å parse fødselsdato for type: $type. Grunn:", cause)
Expand All @@ -140,16 +155,43 @@ class Personidentifikator(private val ident: String) {

private fun førsteSiffer(): Int = ident.substring(0, 1).toInt()
private fun tredjeSiffer(): Int = ident.substring(2, 3).toInt()
private fun tredjeOgFjerdeSiffer(): Int = ident.substring(2, 4).toInt()

private fun String.tilVanligFraDNummer(): String = replaceRange(0, 1, "${førsteSiffer() - D_NUMMER_GRENSEVERDI}")
private fun String.tilVanligFraTestNorgeNummer(): String =
replaceRange(2, 3, "${tredjeSiffer() - TEST_NORGE_GRENSEVERDI}")

private fun String.tilVanligFraDollyFNR(): String {
val dag = this.substring(0, 2)
var måned = this.substring(2, 4).toInt()
val år = this.substring(4, 6)
val personNummer = this.substring(6)

måned -= DOLLY_FNR_GRENSEVERDI
val nyMåned = if (måned < 10) "0$måned" else måned.toString()

return "$dag$nyMåned$år$personNummer"
}
private fun String.tilVanligFraDollyDNR(): String {
var dag = this.substring(0, 2)
var måned = this.substring(2, 4).toInt()
val år = this.substring(4, 6)
val personNummer = this.substring(6)

måned -= DOLLY_FNR_GRENSEVERDI
val nyDag = dag.replaceRange(0, 1, "${førsteSiffer() - D_NUMMER_GRENSEVERDI}")
val nyMåned = if (måned < 10) "0$måned" else måned.toString()

return "$nyDag$nyMåned$år$personNummer"
}

private fun erTestNorgeFNummer(): Boolean = tredjeSiffer() >= TEST_NORGE_GRENSEVERDI
private fun erDollyFnr(): Boolean = tredjeOgFjerdeSiffer() >= DOLLY_FNR_GRENSEVERDI
private fun erDollyDnr(): Boolean = erDollyFnr() && erDNummer()
private fun erDNummer(): Boolean = førsteSiffer() >= D_NUMMER_GRENSEVERDI
private fun erTestNorgeDNummer(): Boolean = erTestNorgeFNummer() && erDNummer()

enum class Type {
FNR, DNR, TEST_NORGE_FNR, TEST_NORGE_DNR
FNR, DNR, TEST_NORGE_FNR, TEST_NORGE_DNR, DOLLY_FNR, DOLLY_DNR
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,13 @@ internal class PersonidentifikatorTest {
// TEST_NORGE_DNR
"42921275204", // D-nummer fra TestNorge med +4 på første siffer og +8 på tredje

// DOLLY_FNR (+40 i måned)
"17912099997", "12429400544", "12505209719", // Mann
"29822099635", "05440355678", "21483609245", // Kvinne

// DOLLY_DNR (+4 på første siffer og +40 i måned)
"55507608360", "52429405181", "52505209540", // Mann
"69422056629", "45440356293", "61483601467" // Kvinne
]
)
internal fun `gitt gyldige identer, forvent ingen feil`(ident: String) {
Expand Down

0 comments on commit 8b55d9d

Please sign in to comment.