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)
}

Created by Pretty R at inside-R.org

admin niedziela, 11 grudzień 2011 - 12:47 am | | Blog-R