Skip to content

Commit

Permalink
Merge pull request #321 from navikt/fnr-validator
Browse files Browse the repository at this point in the history
Validate fnr
  • Loading branch information
flexable777 authored Jun 24, 2021
2 parents b34e30b + cce0cee commit 1c202a8
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 3 deletions.
16 changes: 13 additions & 3 deletions src/main/kotlin/no/nav/klage/oppgave/service/MottakService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@ package no.nav.klage.oppgave.service


import io.micrometer.core.instrument.MeterRegistry
import no.nav.klage.oppgave.api.view.KvalitetsvurderingManuellInput
import no.nav.klage.oppgave.api.view.OversendtKlage
import no.nav.klage.oppgave.api.view.*
import no.nav.klage.oppgave.clients.norg2.Norg2Client
import no.nav.klage.oppgave.config.incrementMottattKlage
import no.nav.klage.oppgave.domain.events.MottakLagretEvent
Expand All @@ -16,6 +15,7 @@ import no.nav.klage.oppgave.exceptions.OversendtKlageNotValidException
import no.nav.klage.oppgave.repositories.EnhetRepository
import no.nav.klage.oppgave.repositories.MottakRepository
import no.nav.klage.oppgave.util.getLogger
import no.nav.klage.oppgave.util.isValidFnrOrDnr
import org.springframework.context.ApplicationEventPublisher
import org.springframework.core.env.Environment
import org.springframework.stereotype.Service
Expand Down Expand Up @@ -75,7 +75,8 @@ class MottakService(

fun OversendtKlage.validate() {
tilknyttedeJournalposter.forEach { validateJournalpost(it.journalpostId) }

validatePartId(klager.id)
sakenGjelder?.run { validatePartId(sakenGjelder.id) }
validateTema(tema)
validateType(type)
validateEnhet(avsenderEnhet)
Expand Down Expand Up @@ -116,4 +117,13 @@ class MottakService(
throw OversendtKlageNotValidException("$journalpostId er ikke en gyldig journalpost referanse")
}

private fun validatePartId(partId: OversendtPartId) {
if (partId.type == OversendtPartIdType.VIRKSOMHET) {
return
}

if (!isValidFnrOrDnr(partId.verdi)) {
throw OversendtKlageNotValidException("Ugyldig fødselsnummer")
}
}
}
21 changes: 21 additions & 0 deletions src/main/kotlin/no/nav/klage/oppgave/util/IdentUtil.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package no.nav.klage.oppgave.util

fun isValidFnrOrDnr(fnr: String): Boolean {
if (fnr.length != 11) {
return false
}
val d1 = fnr.substring(0, 1).toInt()
val d2 = fnr.substring(1, 2).toInt()
val m1 = fnr.substring(2, 3).toInt()
val m2 = fnr.substring(3, 4).toInt()
val y1 = fnr.substring(4, 5).toInt()
val y2 = fnr.substring(5, 6).toInt()
val i1 = fnr.substring(6, 7).toInt()
val i2 = fnr.substring(7, 8).toInt()
val i3 = fnr.substring(8, 9).toInt()

val k1 = 11 - ((3 * d1 + 7 * d2 + 6 * m1 + 1 * m2 + 8 * y1 + 9 * y2 + 4 * i1 + 5 * i2 + 2 * i3) % 11)
val k2 = 11 - ((5 * d1 + 4 * d2 + 3 * m1 + 2 * m2 + 7 * y1 + 6 * y2 + 5 * i1 + 4 * i2 + 3 * i3 + 2 * k1) % 11)

return k1 == fnr.substring(9, 10).toInt() && k2 == fnr.substring(10, 11).toInt()
}
18 changes: 18 additions & 0 deletions src/test/kotlin/no/nav/klage/oppgave/util/IdentUtilTest.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package no.nav.klage.oppgave.util

import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test

class IdentUtilTest {

@Test
fun `ugyldig fødselsnummer gir feil`() {
assertThat(isValidFnrOrDnr("12345678910")).isFalse
}

@Test
fun `gyldig d-nummer gir rett svar`() {
assertThat(isValidFnrOrDnr("02446701749")).isTrue
}

}

0 comments on commit 1c202a8

Please sign in to comment.