This file contains more information about the "No Duplicate Security Codes" option. Why is this more useful than the "No Duplicate Scores" Option?: You can add randomness to your security code. You might be wondering how. There are two methods that I can think of off the top of my head, both of which rely on the fact that PERL treats numbers the same as strings: 1) Certain digits (or characters if you want) in the security code can be random and be disregarded in the security check. For instance, let me use an extremely simple example. For this security check, you simply insert a random digit after the first digit and another random digit after the third digit (after the inserting of the first random digit. Now, when you go to do the security check, simply remove thos random digits and perform your check. That's a very simple means of randomizing a security code. Of course, you would probably want more randomness than that in your code. Here's the example check for this: # The security code takes the form of xrxrxxx, where r is a random digit and x is a normal digit # DO NOT VIEW EXAMPLE SOURCES WITH WORD WRAP! # The next line removes the random digits $new_secure = substr($secure,0,1).substr($secure,2,1).substr($secure,4); # Manipulate and compare $new_secure 2) Encryt the security code using a random method. The simplest example of this that I can think of is to generate a random two-digit number and then multiply the security code by it. Then, put the random two-digit number on the front of the security code. During the security check, simply remove the first two-digits from the security code, store them, and then divide the new security code by the two-digit number that you removed. Simple, eh? Here's the example check for this: # The security code takes the form of rrxxxxx, where rr is a random two-digit number and x is a normal digit # DO NOT VIEW EXAMPLE SOURCES WITH WORD WRAP! $rand_number = substr($secure,0,2); # gets and stores the random tow-digit number $new_secure = substr($secure,2); # Removes the two-digit number $new_secure = $new_secure/$rand_number; # Decrypts security code by dividing by two-digit number # Manipulate and compare $new_secure Whoa! I'm confused. What is that substr thingy?: It's a PERL function. I will define some useful ones in a minute. What are some useful string parsing functions?: I'm glad you asked. -substr($string,offset,length,$replacement) --This function returns the designated substring --$string->I believe that this is self-explanatory --offset->position of charater (positions start at ZERO and count up) --length->number of characters to get (this can be omitted to retrieve up to the end of the $string) --$replacement->this causes the function to replace the designated string as well as return it (this can be omitted) --For example: $string = "Hi, I'm Matt"; $new = substr($string,8,4,"Joe"); This will store "Matt" in the string $new and will change $string to "Hi, I'm Joe". -. (the dot operator) --This merely combines to strings. --For example, $string = "Hi"; $new = $string.", I'm Matt"; This stores "Hi, I'm Matt to $new. -split(/$delimiter/,$string) --This will tokenize the $string using the $delimiter. --For example, $string = "A,B,C,D"; ($Ay,$Bee,$Cee,$Dee) = split(/,/,$string); This will store "A" to $Ay, "B" to $Bee, "C" to $Cee, and "D" to $Dee. -join($joiner,list) --This will combine a list into one string, seperating each string in the list with the $joiner --For example, take the strings from the previous example ($Ay,$Bee,$Cee,and $Dee) $new = join(",",($Ay,$Bee,$Cee,$Dee)); This will store "A,B,C,D" to $new. -index($string,$substring,$starting_point) --This function returns the position of the first occurence of $substring in $string after the designated $starting_point --If $starting_point is omitted, it is assumed to be zero. For example, index("Hi! I'm Matt","!") will return 2 (position start from 0, so 2 is the third position) -rindex($string,$substring,$starting_point) --This is the same as index() except that it starts from the end of the $string.