Skip to content

Commit 5ab009d

Browse files
committed
Add ULI validation
1 parent 941e5a0 commit 5ab009d

File tree

2 files changed

+23
-10
lines changed
  • validation/src

2 files changed

+23
-10
lines changed

validation/src/main/scala/hmda/validation/engine/lar/ULI.scala

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,27 +33,33 @@ object ULI {
3333
"z" -> 35
3434
)
3535

36-
private def convert(uli: String): String = uli
36+
def convert(loanId: String): String = loanId
3737
.map(_.toLower)
3838
.map { c =>
3939
if (!c.isDigit)
4040
conversionTable(c.toString).toString
4141
else
4242
c
43-
}.mkString("") + "00"
43+
}.mkString("")
4444

45-
private def calculateMod(i: BigInt): BigInt = {
45+
def calculateMod(i: BigInt): BigInt = {
4646
i % 97
4747
}
4848

49-
private def calculateCheckDigit(i: BigInt) = {
49+
def calculateCheckDigit(i: BigInt) = {
5050
98 - i
5151
}
5252

53-
def checkDigit(uli: String): String = {
54-
val checkDigit =
55-
calculateCheckDigit(calculateMod(BigInt(convert(uli))))
56-
uli + checkDigit.toString
53+
def checkDigit(uli: String): BigInt = {
54+
calculateCheckDigit(calculateMod(BigInt(convert(uli) ++ "00")))
55+
}
56+
57+
def generateULI(uli: String): String = {
58+
uli + checkDigit(uli).toString()
59+
}
60+
61+
def validate(uli: String): Boolean = {
62+
calculateMod(BigInt(convert(uli))) == 1
5763
}
5864

5965
}

validation/src/test/scala/hmda/validation/engine/lar/ULISpec.scala

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,17 @@ import org.scalatest.{ MustMatchers, WordSpec }
44

55
class ULISpec extends WordSpec with MustMatchers {
66

7+
val validULI = "10Bx939c5543TqA1144M999143X"
8+
val invalidULI = "10Bx939c5543TqA1144M999133X38"
9+
710
"A ULI Validation" must {
811
"Produce valid check digit" in {
9-
val uli = "10Bx939c5543TqA1144M999143X"
10-
ULI.checkDigit(uli) mustBe "10Bx939c5543TqA1144M999143X38"
12+
ULI.checkDigit(validULI) mustBe 38
13+
ULI.generateULI(validULI) mustBe "10Bx939c5543TqA1144M999143X38"
14+
}
15+
"Validate ULI" in {
16+
ULI.validate(validULI + "38") mustBe true
17+
ULI.validate(invalidULI) mustBe false
1118
}
1219
}
1320
}

0 commit comments

Comments
 (0)