#' Check validity of ORCiD
#'
#' @param orcid a 16-character ORCiD in bare or URL format
#'
#' @return a formatted 16-character ORCiD or FALSE
#' @export
#'
#' @examples
#' check_orcid("0000-0002-7523-5539")
#' check_orcid("0000-0002-0247-239X")
#' check_orcid("https://orcid.org/0000-0002-0247-239X")
#' check_orcid("0000-0002-0247-2394") # incorrect, return FALSE
check_orcid <- function(orcid) {
baseDigits <- gsub("[^0-9X]", "", orcid)
if (nchar(baseDigits) != 16) {
if (pdsbuilder_options("verbose")) {
warning("The ORCiD ", orcid, " is not valid.")
}
return(FALSE)
}
total <- 0
for (i in 1:(nchar(baseDigits)-1)) {
digit <- substr(baseDigits, i, i) %>% as.integer()
total <- (total + digit) * 2
}
remainder <- total %% 11;
result <- (12 - remainder) %% 11;
result <- ifelse(result == 10, "X", result)
if (result == substr(baseDigits, 16, 16)) {
paste(substr(baseDigits, 1, 4),
substr(baseDigits, 5, 8),
substr(baseDigits, 9, 12),
substr(baseDigits, 13, 16),
sep = "-")
} else {
if (pdsbuilder_options("verbose")) {
warning("The ORCiD ", orcid, " is not valid.")
}
return(FALSE)
}
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.