用于生成随机密码的函数

Seb*_*anS 13 string random r

我想为具有以下功能的员工生成随机密码.这是我第一次尝试使用R中的函数.所以我需要一些帮助.

genPsw <- function(num, len=8) {
          # Vorgaben für die Passwortkonventionen festlegen
            myArr  <- c("", 2, 3, 4, 5, 6, 7, 8, 9, "A", "B", 
                        "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", 
                        "N", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", 
                        "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o",
                        "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", 
                        "!", "§", "$", "%", "&", "(", ")", "*")
          # replicate is a wrapper for the common use of sapply for repeated evaluation of an expression 
          # (which will usually involve random number generation).
            replicate(num, paste(sample(myArr, size=len, replace=T), collapse=""))
          # nrow of dataframe mitarbeiter 
          dim_mitarbeiter <- nrow(mitarbeiter)
          for(i in 1:dim_mitarbeiter) {
                        # Random Number Generation with i
                          set.seed(i)
                        # Generate Passwort for new variable password
                        mitarbeiter$passwort <- genPsw(i)                
          }

}
Run Code Online (Sandbox Code Playgroud)

使用Floo0的答案,我已经将函数更改为类似的东西,但它不起作用:

genPsw <- function(num, len=8) {
          # Vorgaben für die Passwortkonventionen festlegen
          sam<-list()
          sam[[1]]<-1:9
          sam[[2]]<-letters
          sam[[3]]<-LETTERS
          sam[[4]]<-c("!", "§", "$", "%", "&", "(", ")", "*")

          # nrow of dataframe mitarbeiter 
          dim_mitarbeiter <- nrow(mitarbeiter)
          for(i in 1:dim_mitarbeiter) {
                        # Random Number Generation with i
                            tmp<-mapply(sample,sam,c(2,2,2,2))
                         # Generate Passwort for new variable password
                        mitarbeiter$passwort <- paste(sample(tmp),collapse="")
          }

}
Run Code Online (Sandbox Code Playgroud)

Ren*_*rop 13

关于什么

samp<-c(2:9,letters,LETTERS,"!", "§", "$", "%", "&", "(", ")", "*")
paste(sample(samp,8),collapse="")
Run Code Online (Sandbox Code Playgroud)

结果是这样的

"HKF§VvnD"
Run Code Online (Sandbox Code Playgroud)

警告:此approch不强制使用大写字母,数字和非字母数字符号

编辑:

如果你想强制执行一定数量的大写字母,数字和非字母数字符号,你可以使用:

sam<-list()
sam[[1]]<-1:9
sam[[2]]<-letters
sam[[3]]<-LETTERS
sam[[4]]<-c("!", "§", "$", "%", "&", "(", ")", "*")

tmp<-mapply(sample,sam,c(2,2,2,2))
paste(sample(tmp),collapse="")
Run Code Online (Sandbox Code Playgroud)

Where c(2,2,2,2)指定数字,字母,大写字母和symbild的数量(按此顺序).结果:

[1] "j$bP%5R3"
Run Code Online (Sandbox Code Playgroud)

EDIT2: 要在表中生成一个新列,mitarbeiter只需使用

passwort<-replicate(nrow(mitarbeiter),paste(mapply(sample,sam,c(2,2,2,2)),collapse=""))
mitarbeiter$passwort<-passwort
Run Code Online (Sandbox Code Playgroud)


bar*_*nus 7

有一个函数在stringi包中生成随机字符串:

require(stringi)
stri_rand_strings(n=2, length=8, pattern="[A-Za-z0-9]")
## [1] "90i6RdzU" "UAkSVCEa"
Run Code Online (Sandbox Code Playgroud)