### <code r>
isCPF <- function(cpf.str) {
cpf <- gsub('[^[:digit:]]+', '', cpf.str)
### primeiro dígito verificador:
cpf.1 <- as.numeric(strsplit(substr(cpf, 1,9), "")[[1]])
sm.1 <- sum(cpf.1 * 10:2) ### 249
dig.1 <- ifelse((sm.1 %% 11)==0 | (sm.1 %% 11)>9, 0, 11-(sm.1 %% 11)) ### 4
### se o resto da divisão for 10 ou 11, o dígito será 0;
### segundo dígito verificador:
cpf.2 <- as.numeric(strsplit(substr(cpf, 1,10), "")[[1]])
sm.2 <- sum(cpf.2 * 11:2) ### 299
dig.2 <- ifelse((sm.2 %% 11)==0 | (sm.2 %% 11)>9, 0, 11-(sm.2 %% 11)) ### 9
### testa dígitos calculados
ver <- paste0(dig.1, dig.2) == substr(cpf, 10,11)
return(ver); print(ver)
}
isCPF("546.471.429-49") ### TRUE
isCPF("546.471.429-99") ### FALSE
### </code>