Guest User

Untitled

a guest
Oct 16th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.65 KB | None | 0 0
  1. # gerar digito de controle a partir de 8 digitos
  2. cpf_dig_controle <- function(y){
  3. v1 <- 0L
  4. v2 <- 0L
  5. z <- as.integer(rev(strsplit(as.character(y), "")[[1]]))
  6. for(i in seq_along(z)){
  7. v1 <- v1 + z[i]*(9 - (i %% 10))
  8. v2 <- v2 + z[i]*(9 - ((i + 1) %% 10))
  9. }
  10. v1 <- (v1 %% 11) %% 10
  11. v2 <- v2 + v1*9
  12. v2 <- (v2 %% 11) %% 10
  13. c(v1, v2)
  14. }
  15.  
  16. # gerar CPF
  17. cpf_gerar <- function(x){
  18. g <- function(y, v){
  19. z <- strsplit(as.character(y), "")[[1]]
  20. z <- as.integer(c(z, v))
  21. res <- sprintf(fmt = "%d%d%d.%d%d%d.%d%d%d-%02d",
  22. z[1], z[2], z[3], z[4], z[5],
  23. z[6], z[7], z[8], z[9], z[10])
  24. res
  25. }
  26. v <- lapply(x, cpf_dig_controle)
  27. result <- sapply(seq_along(x), function(i) g(x[i], v[[i]]))
  28. result
  29. }
  30.  
  31. # cpf gerado
  32. cpf <- cpf_gerar(c("01861932", "01234567","12345678","11511611"))
  33. cpf
  34.  
  35. # validar cpf
  36. cpf_validar <- function(x){
  37. f <- function(y){
  38. z <- unlist(strsplit(y, "\."))
  39. v <- substr(z[3], 3, 6)
  40. v <- as.integer(unlist(strsplit(v, "-")))
  41. z[3] <- substr(z[3], 1, 2)
  42. z <- as.integer(paste(z, collapse = ""))
  43. list(x = z, v = v)
  44. }
  45. result <- lapply(x, f)
  46. valido <- lapply(result, function(r) unlist(lapply(r$x,
  47. cpf_dig_controle)))
  48. valido <- sapply(seq_along(valido), function(i)
  49. result[[i]]$v[1] == valido[[i]][1] & result[[i]]$v[2] == valido[[i]][2]
  50. )
  51. valido
  52. }
  53.  
  54. #cpfs gerados pela função cpf_dig_controle a partir de 8 digitos
  55. cpf_validar(c("018.619.323-00","012.345.673-02","123.456.786-
  56. 02","115.116.111-04"))
  57.  
  58. #cpf válido, porém a função o qualifica como FALSE
  59. cpf_validar("288.065.030-57")
  60.  
  61. cpf_dig_controle <- function(y){
  62. v1 <- 0L
  63. v2 <- 0L
  64. num <- is.numeric(y)
  65. z <- as.integer(strsplit(as.character(y), "")[[1]])
  66. n <- length(z)
  67. if(num){
  68. if(n == 7){
  69. z <- c(0, z, sample(0:9, 1))
  70. } else{
  71. if(n == 8){
  72. z <- c(0, z)
  73. } else{
  74. z <- z
  75. }
  76. }
  77. } else{
  78. if(n == 8){
  79. z <- c(z, sample(0:9, 1))
  80. } else{
  81. z <- z
  82. }
  83. }
  84. for(i in seq_along(z)){
  85. v1 <- v1 + z[i]*(11-i)
  86. v2 <- v2 + z[i]*(12-i)
  87. }
  88. v1 <- v1 %% 11
  89. if(v1 < 2){
  90. v1 <- 0
  91. } else{
  92. v1 <- 11 - v1
  93. }
  94. v2 <- v2 + 2*v1
  95. v2 <- v2 %% 11
  96. if(v2 < 2){
  97. v2 <- 0
  98. } else{
  99. v2 <- 11 - v2
  100. }
  101. c(v1, v2)
  102. }
  103.  
  104. cpf_gerar <- function(x){
  105. g <- function(y, v){
  106. num <- is.numeric(y)
  107. z <- as.integer(strsplit(as.character(y), "")[[1]])
  108. n <- length(z)
  109. if(num){
  110. if(n == 7){
  111. z <- c(0, z, sample(0:9, 1))
  112. } else{
  113. if(n == 8){
  114. z <- c(0, z)
  115. } else{
  116. z <- z
  117. }
  118. }
  119. } else{
  120. if(n == 8){
  121. z <- c(z, sample(0:9, 1))
  122. } else{
  123. z <- z
  124. }
  125. }
  126. z <- as.integer(c(z, v))
  127. res <- sprintf(fmt = "%d%d%d.%d%d%d.%d%d%d-%d%d",
  128. z[1], z[2], z[3], z[4], z[5], z[6], z[7], z[8], z[9], z[10], z[11])
  129. res
  130. }
  131. v <- lapply(x, cpf_dig_controle2)
  132. result <- sapply(seq_along(x), function(i) g(x[i], v[[i]]))
  133. result
  134. }
  135.  
  136. cpf_validar <- function(x){
  137. f <- function(y){
  138. z <- unlist(strsplit(y, "\."))
  139. v <- substr(z[3], 5, 6)
  140. v <- as.integer(unlist(strsplit(v, "")))
  141. z[3] <- substr(z[3], 1, 3)
  142. z <- as.integer(paste(z, collapse = ""))
  143. list(x = z, v = v)
  144. }
  145. result <- lapply(x, f)
  146. valido <- lapply(result, function(r) unlist(lapply(r$x, cpf_dig_controle)))
  147. valido <- sapply(seq_along(valido), function(i)
  148. result[[i]]$v[1] == valido[[i]][1] & result[[i]]$v[2] == valido[[i]][2]
  149. )
  150. valido
  151. }
  152.  
  153. cpf_validar("288.065.030-57")
  154. [1] TRUE
  155.  
  156. cpf_gerar("018619326")
  157. [1] "018.619.326-26"
  158. cpf_gerar(018619326)
  159. [1] "018.619.326-26"
  160. cpf_validar("018.619.326-26")
  161. [1] TRUE
  162.  
  163. cpf_gerar("012345678")
  164. [1] "012.345.678-90"
  165. cpf_gerar(012345678)
  166. [1] "012.345.678-90"
  167. cpf_validar("012.345.678-90")
  168. [1] TRUE
Add Comment
Please, Sign In to add comment