您现在的位置:网侠>技术开发>.NET使用>正文
正文

google pagerank checksum算法(2)

文章来源: 文章作者: 发布时间:2006-08-17 【字体:
收藏本文】 【推荐好友】 【进入博客】 【进入论坛

checksum的vb代码:

'=========================================================

' functions for the checksum:

'

' Function sl(ByVal x, ByVal n)

' Function sr(ByVal x, ByVal n)

' Function zeroFill(ByVal a, ByVal b)

' Private Function uadd(ByVal L1, ByVal L2)

' Private Function usub(ByVal L1, ByVal L2)

' Function mix(ByVal ia, ByVal ib, ByVal ic)

' Function gc(ByVal s, ByVal i)

' function GoogleCH(ByVal sURL)

' Function CalculateChecksum(sURL)

'=========================================================

Function sl(ByVal x, ByVal n)

If n = 0 Then

sl = x

Else

Dim k

k = CLng(2 ^ (32 - n - 1))

Dim d

d = x And (k - 1)

Dim c

c = d * CLng(2 ^ n)

If x And k Then

c = c Or &H80000000

End If

sl = c

End If 字串3

End Function

字串7

Function sr(ByVal x, ByVal n)

If n = 0 Then

sr = x

Else

Dim y

y = x And &H7FFFFFFF

Dim z

If n = 32 - 1 Then

z = 0

Else

z = y \ CLng(2 ^ n)

End If

If y <> x Then

z = z Or CLng(2 ^ (32 - n - 1))

End If

sr = z

End If

End Function

字串8

Function zeroFill(ByVal a, ByVal b)  

Dim x

if (&H80000000 AND a) then

x = sr(a,1)

x = x AND (NOT &H80000000)

x = x OR &H40000000

x = sr(x,b-1)

else

x = sr(a,b)

end if

zeroFill = x

End Function
字串2

Private Function uadd(ByVal L1, ByVal L2)

Dim L11, L12, L21, L22, L31, L32

L11 = L1 And &HFFFFFF

L12 = (L1 And &H7F000000) \ &H1000000

If L1 < 0 Then L12 = L12 Or &H80

L21 = L2 And &HFFFFFF

L22 = (L2 And &H7F000000) \ &H1000000

If L2 < 0 Then L22 = L22 Or &H80

L32 = L12 + L22

L31 = L11 + L21

If (L31 And &H1000000) Then L32 = L32 + 1

uadd = (L31 And &HFFFFFF) + (L32 And &H7F) * &H1000000

If L32 And &H80 Then uadd = uadd Or &H80000000

End Function
字串7

Private Function usub(ByVal L1, ByVal L2)

Dim L11, L12, L21, L22, L31, L32

L11 = L1 And &HFFFFFF

L12 = (L1 And &H7F000000) \ &H1000000

If L1 < 0 Then L12 = L12 Or &H80

L21 = L2 And &HFFFFFF

L22 = (L2 And &H7F000000) \ &H1000000

If L2 < 0 Then L22 = L22 Or &H80

L32 = L12 - L22

L31 = L11 - L21

If L31 < 0 Then

L32 = L32 - 1

L31 = L31 + &H1000000

End If

usub = L31 + (L32 And &H7F) * &H1000000

If L32 And &H80 Then usub = usub Or &H80000000

End Function



Function mix(ByVal ia, ByVal ib, ByVal ic)

Dim a, b, c

a = ia

b = ib

c = ic



a = usub(a,b)

a = usub(a,c)

a = a XOR zeroFill(c,13)



b = usub(b,c)

b = usub(b,a)

b = b XOR sl(a,8) 字串7



c = usub(c,a)

c = usub(c,b)

c = c XOR zeroFill(b,13)



a = usub(a,b)

a = usub(a,c)

a = a XOR zeroFill(c,12)



b = usub(b,c)

b = usub(b,a)

b = b XOR sl(a,16)



c = usub(c,a)

c = usub(c,b)

c = c XOR zeroFill(b,5)



a = usub(a,b)

a = usub(a,c)

a = a XOR zeroFill(c,3)



b = usub(b,c)

b = usub(b,a)

b = b XOR sl(a,10)



c = usub(c,a)

c = usub(c,b)

c = c XOR zeroFill(b,15)



Dim ret(3)



ret(0) = a

ret(1) = b

ret(2) = c



mix = ret

End Function
字串8

Function gc(ByVal s, ByVal i)

gc = Asc(Mid(s,i+1,1))

End Function
字串9

function GoogleCH(ByVal sURL)

Dim iLength, a, b, c, k, iLen, m

iLength = Len(sURL)

字串5

a = &H9E3779B9

b = &H9E3779B9

c = GOOGLE_MAGIC

k = 0



iLen = iLength

do while iLen >= 12

a = uadd(a,(uadd(gc(sURL,k+0),uadd(sl(gc(sURL,k+1),8),uadd(sl(gc(sURL,k+2),16),sl(gc(sURL,k+3),24))))))

b = uadd(b,(uadd(gc(sURL,k+4),uadd(sl(gc(sURL,k+5),8),uadd(sl(gc(sURL,k+6),16),sl(gc(sURL,k+7),24))))))

c = uadd(c,(uadd(gc(sURL,k+8),uadd(sl(gc(sURL,k+9),8),uadd(sl(gc(sURL,k+10),16),sl(gc(sURL,k+11),24))))))
字串4

m = mix(a,b,c)



a = m(0)

b = m(1)

c = m(2)



k = k + 12
字串8

iLen = iLen - 12

loop

字串4

c = uadd(c,iLength)

字串6

select case iLen ' all the case statements fall through

case 11

c = uadd(c,sl(gc(sURL,k+10),24))

c = uadd(c,sl(gc(sURL,k+9),16))

c = uadd(c,sl(gc(sURL,k+8),8))

b = uadd(b,sl(gc(sURL,k+7),24))

b = uadd(b,sl(gc(sURL,k+6),16))

b = uadd(b,sl(gc(sURL,k+5),8))

b = uadd(b,gc(sURL,k+4))

a = uadd(a,sl(gc(sURL,k+3),24))

a = uadd(a,sl(gc(sURL,k+2),16))

a = uadd(a,sl(gc(sURL,k+1),8))

a = uadd(a,gc(sURL,k+0))

case 10

c = uadd(c,sl(gc(sURL,k+9),16))

c = uadd(c,sl(gc(sURL,k+8),8))

b = uadd(b,sl(gc(sURL,k+7),24))

b = uadd(b,sl(gc(sURL,k+6),16))

b = uadd(b,sl(gc(sURL,k+5),8))

b = uadd(b,gc(sURL,k+4))

a = uadd(a,sl(gc(sURL,k+3),24))

a = uadd(a,sl(gc(sURL,k+2),16))

a = uadd(a,sl(gc(sURL,k+1),8))

a = uadd(a,gc(sURL,k+0))

case 9

c = uadd(c,sl(gc(sURL,k+8),8))

字串9


b = uadd(b,sl(gc(sURL,k+7),24))

b = uadd(b,sl(gc(sURL,k+6),16))

b = uadd(b,sl(gc(sURL,k+5),8))

b = uadd(b,gc(sURL,k+4))

a = uadd(a,sl(gc(sURL,k+3),24))

a = uadd(a,sl(gc(sURL,k+2),16))

a = uadd(a,sl(gc(sURL,k+1),8))

a = uadd(a,gc(sURL,k+0))

case 8

b = uadd(b,sl(gc(sURL,k+7),24))

b = uadd(b,sl(gc(sURL,k+6),16))

b = uadd(b,sl(gc(sURL,k+5),8))

b = uadd(b,gc(sURL,k+4))

a = uadd(a,sl(gc(sURL,k+3),24))

a = uadd(a,sl(gc(sURL,k+2),16))

a = uadd(a,sl(gc(sURL,k+1),8))

a = uadd(a,gc(sURL,k+0))

case 7

b = uadd(b,sl(gc(sURL,k+6),16))

b = uadd(b,sl(gc(sURL,k+5),8))

b = uadd(b,gc(sURL,k+4))

a = uadd(a,sl(gc(sURL,k+3),24))

a = uadd(a,sl(gc(sURL,k+2),16))

a = uadd(a,sl(gc(sURL,k+1),8))

a = uadd(a,gc(sURL,k+0))

case 6

b = uadd(b,sl(gc(sURL,k+5),8)) 字串4

b = uadd(b,gc(sURL,k+4))

a = uadd(a,sl(gc(sURL,k+3),24))

a = uadd(a,sl(gc(sURL,k+2),16))

a = uadd(a,sl(gc(sURL,k+1),8))

a = uadd(a,gc(sURL,k+0))

case 5

b = uadd(b,gc(sURL,k+4))

a = uadd(a,sl(gc(sURL,k+3),24))

a = uadd(a,sl(gc(sURL,k+2),16))

a = uadd(a,sl(gc(sURL,k+1),8))

a = uadd(a,gc(sURL,k+0))

case 4

a = uadd(a,sl(gc(sURL,k+3),24))

a = uadd(a,sl(gc(sURL,k+2),16))

a = uadd(a,sl(gc(sURL,k+1),8))

a = uadd(a,gc(sURL,k+0))

case 3

a = uadd(a,sl(gc(sURL,k+2),16))

a = uadd(a,sl(gc(sURL,k+1),8))

a = uadd(a,gc(sURL,k+0))

case 2

a = uadd(a,sl(gc(sURL,k+1),8))

a = uadd(a,gc(sURL,k+0))

case 1

a = uadd(a,gc(sURL,k+0))

End Select



m = mix(a,b,c)



GoogleCH = m(2)

End Function

字串1

Function CalculateChecksum(sURL)

CalculateChecksum = "6" & CStr(GoogleCH("info:" & sURL) AND &H7FFFFFFF)

End Function
字串7




上一篇:用户:我为什么选择IP SAN  下一篇:google pagerank checksum算法(1)
推荐新闻
     
 
邮箱:ewind@qq.com
建议您使用:1024*768以上分辩率浏览本站 如果你喜欢本站 请收藏本站 并推荐给你的朋友一起分享
免责声明:本站部分内容收集于网络,版权归原作者及出版社所有!如果您觉得侵犯了您的版权请来信告诉我们,我们会尽快删除其内容!