回复 第6楼 的 helend:
基本的算函数应该是这样的。
<br />
library(digest)<br />
library(bitops)</p>
<p>MHmakeRandomString <- function(n=1, lenght=12)<br />
{<br />
randomString <- c(1:n) # initialize vector<br />
for (i in 1:n)<br />
{<br />
randomString[i] <- paste(sample(c(0:9, letters, LETTERS),<br />
lenght, replace=TRUE),<br />
collapse="")<br />
}<br />
return(randomString)<br />
}</p>
<p>Mhash <- function( xstr, malgo="md5" ) {<br />
xstr.a<-bitAnd( strtoi(paste("0x",substr(digest(strsplit(xstr,"_")[[1]][1],algo=malgo),1,6),sep="")),0xFFFFFF)<br />
xstr.b<-bitAnd( strtoi(paste("0x",substr(digest(strsplit(xstr,"_")[[1]][3],algo=malgo),1,6),sep="")),0xFF)<br />
return( bitOr(bitShiftL(xstr.a,8),xstr.b) )<br />
}</p>
<p>genStrings <- function(xnum,dig1,dig2) {</p>
<p> return( paste(paste(paste(MHmakeRandomString(xnum,dig1),"_j_",sep=""),MHmakeRandomString(xnum,dig2),sep=""),"_n",sep="") )</p>
<p> }</p>
<p> genStrIndex <- function( xstr,malgo="md5" ) {<br />
return(bitShiftL(bitAnd(strtoi(paste("0x",substr(digest(xstr,algo=malgo),1,6),sep="")),0xFFFFFF),8))<br />
}</p>
<p>
</p>