Guest User

Untitled

a guest
Jun 24th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.30 KB | None | 0 0
  1. /**
  2. * Validate aadhaar number using verhoeff algorithm
  3. * Created by Frozenex
  4. */
  5. class AadhaarUtil {
  6.  
  7. companion object {
  8.  
  9. private val d by lazy {
  10. arrayOf(intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9),
  11. intArrayOf(1, 2, 3, 4, 0, 6, 7, 8, 9, 5),
  12. intArrayOf(2, 3, 4, 0, 1, 7, 8, 9, 5, 6),
  13. intArrayOf(3, 4, 0, 1, 2, 8, 9, 5, 6, 7),
  14. intArrayOf(4, 0, 1, 2, 3, 9, 5, 6, 7, 8),
  15. intArrayOf(5, 9, 8, 7, 6, 0, 4, 3, 2, 1),
  16. intArrayOf(6, 5, 9, 8, 7, 1, 0, 4, 3, 2),
  17. intArrayOf(7, 6, 5, 9, 8, 2, 1, 0, 4, 3),
  18. intArrayOf(8, 7, 6, 5, 9, 3, 2, 1, 0, 4),
  19. intArrayOf(9, 8, 7, 6, 5, 4, 3, 2, 1, 0))
  20. }
  21.  
  22. private val p by lazy {
  23. arrayOf(intArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9),
  24. intArrayOf(1, 5, 7, 6, 2, 8, 3, 0, 9, 4),
  25. intArrayOf(5, 8, 0, 3, 7, 9, 6, 1, 4, 2),
  26. intArrayOf(8, 9, 1, 6, 0, 4, 3, 5, 2, 7),
  27. intArrayOf(9, 4, 5, 3, 1, 2, 6, 8, 7, 0),
  28. intArrayOf(4, 2, 8, 6, 5, 7, 3, 9, 0, 1),
  29. intArrayOf(2, 7, 9, 3, 8, 0, 6, 4, 1, 5),
  30. intArrayOf(7, 0, 4, 6, 9, 1, 3, 2, 5, 8))
  31. }
  32.  
  33. private val TRIM_SPACE_REGEX by lazy { "\\s".toRegex() }
  34.  
  35.  
  36. /**
  37. * Check if aadhaar number is valid or not
  38. * @param aadhaarNo
  39. * @return Boolean
  40. */
  41. fun isAadhaarNumberValid(aadhaarNo: String): Boolean {
  42.  
  43. // Remove extra spaces
  44. val mAadhaarNo = aadhaarNo.replace(TRIM_SPACE_REGEX, "")
  45.  
  46. // Check if aadhaar no has 12 digits
  47. // Check if aadhaar no consists only of digits
  48. // Check if aadhaar no first digit is not 0 or 1
  49. if (mAadhaarNo.length != 12 || mAadhaarNo.toBigIntegerOrNull() == null || mAadhaarNo.first().toString().toInt() in 0..1) return false
  50.  
  51. // Check using verhoeff algorithm
  52. var c = 0
  53. val reversedIntArray = mAadhaarNo.chunked(1).map({ it.toInt() }).toIntArray().reversedArray()
  54. for (i in reversedIntArray.indices) {
  55. c = d[c][p[i % 8][reversedIntArray[i]]]
  56. }
  57.  
  58. return c == 0
  59. }
  60. }
  61. }
Add Comment
Please, Sign In to add comment