しおしお

IntelliJ IDEAのことなんかを書いてます

法人番号のチェックデジットを算出してみた

法人番号のチェックデジットの求め方は、法人番号を確認するページにあるチェックデジットの計算リンクから確認できます。

チェックデジットを求めるコード

川口市の法人番号を使ってチェックデジットを求めるコードを書いてみました。 頭ひと桁がチェックデジットなので結果として2が求められればOKですね。

fun main() {
    val corporateNumber = "2000020112038"
    data class Temp(val odd: Int, val even: Int) {
        fun addOdd(value: Int) = this.copy(odd = odd + value)
        fun addEven(value: Int) = this.copy(even = even + value)
    }

    val checkDigit = corporateNumber
            .substring(1)
            .reversed()
            .foldIndexed(Temp(0, 0)) { index, acc, c ->
                when ((index + 1) % 2) {
                    0 -> acc.addOdd(c.toInt())
                    else -> acc.addEven(c.toInt())
                }
            }
            .let { (it.odd * 2) + it.even }
            .let { 9 - (it % 9) }
    println("checkDigit = ${checkDigit}")
}

実行結果

チェックデジットが正しく求められたっぽいことがわかります!
f:id:sioiri:20190719233927p:plain