Skip to content

Instantly share code, notes, and snippets.

@f3llps
Forked from trfiladelfo/CPFValidator.kt
Created April 27, 2024 18:59

Revisions

  1. @trfiladelfo trfiladelfo revised this gist Jun 18, 2021. 1 changed file with 7 additions and 13 deletions.
    20 changes: 7 additions & 13 deletions CPFValidator.kt
    Original file line number Diff line number Diff line change
    @@ -1,27 +1,21 @@
    fun isCPF(document: String): Boolean {
    if (TextUtils.isEmpty(document)) return false
    if (document.isEmpty()) return false

    val numbers = arrayListOf<Int>()

    document.filter { it.isDigit() }.forEach {
    numbers.add(it.toString().toInt())
    val numbers = document.filter { it.isDigit() }.map {
    it.toString().toInt()
    }

    if (numbers.size != 11) return false

    //repeticao
    (0..9).forEach { n ->
    val digits = arrayListOf<Int>()
    (0..10).forEach { digits.add(n) }
    if (numbers == digits) return false
    }
    if (numbers.all { it == numbers[0] }) return false

    //digito 1
    val dv1 = ((0..8).sumBy { (it + 1) * numbers[it] }).rem(11).let {
    val dv1 = ((0..8).sumOf { (it + 1) * numbers[it] }).rem(11).let {
    if (it >= 10) 0 else it
    }
    val dv2 = ((0..8).sumBy { it * numbers[it] }.let { (it + (dv1 * 9)).rem(11) }).let {

    val dv2 = ((0..8).sumOf { it * numbers[it] }.let { (it + (dv1 * 9)).rem(11) }).let {
    if (it >= 10) 0 else it
    }

  2. @trfiladelfo trfiladelfo revised this gist Jul 12, 2018. 1 changed file with 6 additions and 5 deletions.
    11 changes: 6 additions & 5 deletions CPFValidator.kt
    Original file line number Diff line number Diff line change
    @@ -17,11 +17,12 @@ fun isCPF(document: String): Boolean {
    }

    //digito 1
    val dv1 = ((0..8).sumBy { (it + 1) * numbers[it] }).rem(11)

    //digito 2
    val dv2 = (0..8).sumBy { it * numbers[it] }.let {
    (it + (dv1 * 9)).rem(11)
    val dv1 = ((0..8).sumBy { (it + 1) * numbers[it] }).rem(11).let {
    if (it >= 10) 0 else it
    }

    val dv2 = ((0..8).sumBy { it * numbers[it] }.let { (it + (dv1 * 9)).rem(11) }).let {
    if (it >= 10) 0 else it
    }

    return numbers[9] == dv1 && numbers[10] == dv2
  3. @trfiladelfo trfiladelfo revised this gist May 8, 2018. 1 changed file with 3 additions and 12 deletions.
    15 changes: 3 additions & 12 deletions CPFValidator.kt
    Original file line number Diff line number Diff line change
    @@ -17,21 +17,12 @@ fun isCPF(document: String): Boolean {
    }

    //digito 1
    var dv1 = 0
    (0..8).forEach {
    dv1 += ((it + 1) * numbers[it])
    }

    dv1 = dv1.rem(11)
    val dv1 = ((0..8).sumBy { (it + 1) * numbers[it] }).rem(11)

    //digito 2
    var dv2 = 0
    (0..8).forEach {
    dv2 += (it * numbers[it])
    val dv2 = (0..8).sumBy { it * numbers[it] }.let {
    (it + (dv1 * 9)).rem(11)
    }

    dv2 += (dv1 * 9)
    dv2 = dv2.rem(11)

    return numbers[9] == dv1 && numbers[10] == dv2
    }
  4. @trfiladelfo trfiladelfo created this gist May 4, 2018.
    37 changes: 37 additions & 0 deletions CPFValidator.kt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,37 @@
    fun isCPF(document: String): Boolean {
    if (TextUtils.isEmpty(document)) return false

    val numbers = arrayListOf<Int>()

    document.filter { it.isDigit() }.forEach {
    numbers.add(it.toString().toInt())
    }

    if (numbers.size != 11) return false

    //repeticao
    (0..9).forEach { n ->
    val digits = arrayListOf<Int>()
    (0..10).forEach { digits.add(n) }
    if (numbers == digits) return false
    }

    //digito 1
    var dv1 = 0
    (0..8).forEach {
    dv1 += ((it + 1) * numbers[it])
    }

    dv1 = dv1.rem(11)

    //digito 2
    var dv2 = 0
    (0..8).forEach {
    dv2 += (it * numbers[it])
    }

    dv2 += (dv1 * 9)
    dv2 = dv2.rem(11)

    return numbers[9] == dv1 && numbers[10] == dv2
    }