The following code was converted from PHP and Python to VB.Net.

''Pass the call sign to the function
''ex: Passcode = GenPC("K4DNM")  'pass or convert callsign to upper case
''converted from http://blog.eagleflint.com/wp-content/2012/05/APRS-IS_Passcode
''and https://github.com/PHP-APRS-PASSCODE


    Private Function GenPC(ByVal pc As String) As Long
        Dim j As Integer = 1
        'strip station designators. ex: "-5"  Only the real call sign is used
        Dim stophere As Integer = InStr(pc, "-") - 1
        If stophere > 0 Then
            pc = pc.Split("-"c)(0)
        End If

        ''the Hash must be 29666 (non-negotiable)
        Dim hash As Long = 29666

        For j = 1 To pc.Length
            If CBool((j Mod 2)) Then
                hash = hash Xor (Asc(Mid(pc, j, 1)) << 8)
            Else
                hash = hash Xor Asc(Mid(pc, j, 1))
            End If
        Next

        ''mask the high bit so that the result is always positive
        GenPC = hash And 65535
    End Function

 

Use wisely and only if you are an amateur radio operator.