File tree Expand file tree Collapse file tree 2 files changed +72
-0
lines changed
main/scala/hmda/validation/engine/lar
test/scala/hmda/validation/engine/lar Expand file tree Collapse file tree 2 files changed +72
-0
lines changed Original file line number Diff line number Diff line change 1+ package hmda .validation .engine .lar
2+
3+ // See https://www.consumerfinance.gov/eregulations/1003-C/2015-26607_20180101#1003-C-1
4+
5+ object ULIValidation {
6+
7+ val conversionTable = Map (
8+ " a" -> 10 ,
9+ " b" -> 11 ,
10+ " c" -> 12 ,
11+ " d" -> 13 ,
12+ " e" -> 14 ,
13+ " f" -> 15 ,
14+ " g" -> 16 ,
15+ " h" -> 17 ,
16+ " i" -> 18 ,
17+ " j" -> 19 ,
18+ " k" -> 20 ,
19+ " l" -> 21 ,
20+ " m" -> 22 ,
21+ " n" -> 23 ,
22+ " o" -> 24 ,
23+ " p" -> 25 ,
24+ " q" -> 26 ,
25+ " r" -> 27 ,
26+ " s" -> 28 ,
27+ " t" -> 29 ,
28+ " u" -> 30 ,
29+ " v" -> 31 ,
30+ " w" -> 32 ,
31+ " x" -> 33 ,
32+ " y" -> 34 ,
33+ " z" -> 35
34+ )
35+
36+ private def convert (uli : String ): String = uli
37+ .map(_.toLower)
38+ .map { c =>
39+ if (! c.isDigit)
40+ conversionTable(c.toString).toString
41+ else
42+ c
43+ }.mkString(" " ) + " 00"
44+
45+ private def calculateMod (i : BigInt ): BigInt = {
46+ i % 97
47+ }
48+
49+ private def calculateCheckDigit (i : BigInt ) = {
50+ 98 - i
51+ }
52+
53+ def checkDigit (uli : String ): String = {
54+ val checkDigit =
55+ calculateCheckDigit(calculateMod(BigInt (convert(uli))))
56+ uli + checkDigit.toString
57+ }
58+
59+ }
Original file line number Diff line number Diff line change 1+ package hmda .validation .engine .lar
2+
3+ import org .scalatest .{ MustMatchers , WordSpec }
4+
5+ class ULIValidationSpec extends WordSpec with MustMatchers {
6+
7+ " A ULI Validation" must {
8+ " Produce valid check digit" in {
9+ val uli = " 10Bx939c5543TqA1144M999143X"
10+ ULIValidation .checkDigit(uli) mustBe " 10Bx939c5543TqA1144M999143X38"
11+ }
12+ }
13+ }
You can’t perform that action at this time.
0 commit comments