Skip to content

Commit

Permalink
added test cases
Browse files Browse the repository at this point in the history
  • Loading branch information
seventhmoon committed Apr 12, 2021
1 parent 263fcff commit 3a09ec8
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 25 deletions.
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
package com.androidfung.validator.lib

import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4

import androidx.test.platform.app.InstrumentationRegistry
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Test
import org.junit.runner.RunWith

import org.junit.Assert.*

/**
* Instrumented test, which will execute on an Android device.
*
Expand All @@ -21,4 +20,18 @@ class ExampleInstrumentedTest {
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
assertEquals("com.androidfung.validator.lib.test", appContext.packageName)
}

@ExperimentalStdlibApi
@Test
fun hkidTest() {
assert(HkidValidator.isValid("A123456", '3'))
assertFalse(HkidValidator.isValid("A123456", '4'))

assert(HkidValidator.isValid("A654321", '1'))
assertFalse(HkidValidator.isValid("A654321", 'A'))

assert(HkidValidator.isValid("ZA654321", 'A'))
assertFalse(HkidValidator.isValid("ZA654321", '9'))

}
}
43 changes: 22 additions & 21 deletions lib/src/main/java/com/androidfung/validator/lib/HkidValidator.kt
Original file line number Diff line number Diff line change
@@ -1,30 +1,31 @@
package com.androidfung.validator.lib

class HkidValidator {
private val acceptedChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ "
private val hkidRegex = Regex("[A-Z]{1,2}\\d{6}")

@ExperimentalStdlibApi
fun isValid(id: String, checksum: Char) : Boolean{
return try {
calcCheckDigit(id) == checksum
}catch (e : IllegalArgumentException){
false
}
}

@ExperimentalStdlibApi
fun calcCheckDigit(input: String): Char {
if (input.matches(hkidRegex)) {
val id = if (input.length == 7) " $input" else input
val sum = id.mapIndexed { index, c ->
(9 - index) * acceptedChars.indexOf(c)
}.sum()
companion object {
private val acceptedChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ "
private val hkidRegex = Regex("[A-Z]{1,2}\\d{6}")

val checksum = ((11 - (sum % 11)) % 11) // = (11 * ceil(sum / 11.0) - sum).toInt()
@ExperimentalStdlibApi
fun isValid(id: String, checksum: Char): Boolean {
return try {
calcCheckDigit(id) == checksum
} catch (e: IllegalArgumentException) {
false
}
}

return checksum.digitToChar(16)
@ExperimentalStdlibApi
fun calcCheckDigit(input: String): Char {
if (input.matches(hkidRegex)) {
val id = if (input.length == 7) " $input" else input
val sum = id.mapIndexed { index, c ->
(9 - index) * acceptedChars.indexOf(c)
}.sum()
val checksum = ((11 - (sum % 11)) % 11)

} else throw IllegalArgumentException()
return checksum.digitToChar(16)
} else throw IllegalArgumentException()
}
}
}

0 comments on commit 3a09ec8

Please sign in to comment.