'Copyright 2003 The American Cryptogram Association (ACA) '3613 Piedmont Drive, Plano TX 75075-6234 'All rights reserved. 'Amsco ID test CLS : DEFINT A-Z PRINT "Amsco ID test" GOSUB Setup GOSUB GetCipher GOSUB GetScore PRINT "Warning: Test unreliable "; PRINT "if Grille cipher is possible" PRINT "Ave SDD values: Plain 303,"; PRINT " Amsco 187, Columnar 130" PRINT "This cipher scores: "; Score PRINT "Cipher may "; IF Score <= 158 THEN PRINT "not "; PRINT "be Amsco" END 'Subroutines Setup: DIM Sdd(26, 26) d$ = d$ + "03420010004526020443060035" d$ = d$ + "00006000090700000000700070" d$ = d$ + "30002006008000605000300000" d$ = d$ + "16001000440000000001004010" d$ = d$ + "00450000030032036540043800" d$ = d$ + "30000500210000500204100000" d$ = d$ + "20001006100000200100200000" d$ = d$ + "50007000500000000000000000" d$ = d$ + "00500040001137000053050008" d$ = d$ + "00006000000000500000900000" d$ = d$ + "00006000500004000000001000" d$ = d$ + "20042000300700000000000070" d$ = d$ + "55005000200000260000200060" d$ = d$ + "00470080022000003004000000" d$ = d$ + "02000800004055020400745000" d$ = d$ + "30003000000500570600300000" d$ = d$ + "00000000000000000000900000" d$ = d$ + "10004000204000200000000050" d$ = d$ + "11000001200000144014204000" d$ = d$ + "00000008300000300000002000" d$ = d$ + "04300050000623060653000006" d$ = d$ + "00008000400000000000000000" d$ = d$ + "60002006600000200000000000" d$ = d$ + "30701000200000090005000600" d$ = d$ + "16200200060020621021006000" d$ = d$ + "20008000060100000000000009" FOR I = 0 TO 675 'Build Sdd Table c$ = MID$(d$, I + 1, 1): V = VAL(c$) Sdd(INT((I / 26))+1,(I MOD 26)+ 1)=V NEXT I d$ = "" RETURN GetCipher: Ct$ = "" INPUT "Name of ciphertext file"; Fil$ OPEN Fil$ FOR INPUT AS #1 WHILE NOT EOF(1) INPUT #1, c$ IF INSTR(c$, " ") > 0 THEN PRINT c$ PRINT "Remove spaces from "; Fil$ CLOSE #1 END END IF Ct$ = Ct$ + c$ WEND CLOSE #1 PRINT "Ciphertext is "; Ct$ RETURN GetScore: Tlen = LEN(Ct$) - 1: Sum = 0 FOR I = 1 TO Tlen R = ASC(MID$(Ct$, I, 1)) - 64 c = ASC(MID$(Ct$, I + 1)) - 64 Sum = Sum + Sdd(R, c) NEXT I Score = INT(100 * (Sum / Tlen)) RETURN