Kolejne pokłady szuflady - REGON
Był PESEL był NIP, teraz czas na REGON:
function(regon){ wagi7 <- 234567 wagi9 <- 89234567 wagi14 <- 2485097361248 wynik <- logical(length(regon)) for(p in 1:length(regon)){ REGON <- regon[p] REGON <- gsub(" ","",REGON) REGON <- gsub("-","",REGON) suma <- 0 if(nchar(REGON) == 7){ for(i in 1:6){ suma <- suma + as.numeric(substr(REGON,i,i))*as.numeric(substr(wagi7,i,i)) } sk <- suma %% 11 if(sk == as.numeric(substr(REGON,7,7)) | sk == ((as.numeric(substr(REGON,7,7))+10))){ wynik[p] <- TRUE }else{wynik[p] <- FALSE} }else{ if(nchar(REGON) == 9 | nchar(REGON) == 14){ test9 <- function(regon9){ sumas <- 0 for(i in 1:8){ sumas <- sumas + as.numeric(substr(regon9,i,i))*as.numeric(substr(wagi9,i,i)) } sk <- sumas %% 11 if(sk == as.numeric(substr(regon9,9,9)) | sk == ((as.numeric(substr(regon9,9,9))+10))){ return(TRUE) }else{return(FALSE)} } if(nchar(REGON)==9){ wynik[p]<-test9(REGON) }else{ sk1<-test9(substr(REGON,1,9)) for (i in 1:13){ suma <- suma +as.numeric(substr(REGON,i,i))*as.numeric(substr(wagi14,i,i)) } sk <- suma %% 11 if(sk == as.numeric(substr(REGON,14,14)) | sk == ((as.numeric(substr(REGON,14,14))+10))){ sk2 <- TRUE }else{sk2 <- FALSE} if(sk1 & sk2){wynik[p]<-TRUE }else{wynik[p]<-FALSE} } }else{wynik[p]<-FALSE} } } return(wynik) }