Just a little programming exercise that I thought would be fun, creating a simple shift cipher in multiple programming languages for comparison.
First up... PHP
function rot13($input)
{
$output = "";
for ($x = 0; $x < strlen($input); $x++)
{
$ascii = ord($input[$x]);
if ($ascii >= 65 && $ascii <= 77 || $ascii >= 97 && $ascii <= 109) { // A-M & a-m
$output .= chr($ascii + 13);
} else if ($ascii >= 78 && $ascii <= 90 || $ascii >= 110 && $ascii <= 122) { // N-Z & n-z
$output .= chr($ascii - 13);
} else {
$output .= $input[$x];
}
}
return $output;
}
echo rot13('Hello World!') . '<br>';
echo rot13('AaMmNnZz') . '<br>';
echo rot13('ABCDefgHIJKlmnopQRStuvWXyz') . '<br>';
Next... C#
using System;
public class Program
{
public static void Main()
{
Console.WriteLine(rot13("Hello World!"));
Console.WriteLine(rot13("AaMmNnZz"));
Console.WriteLine(rot13("ABCDefgHIJKlmnopQRStuvWXyz"));
}
public static String rot13(String input)
{
String output = "";
foreach (var letter in input)
{
int ascii = (int)letter;
if (ascii >= 65 && ascii <= 77 || ascii >= 97 && ascii <= 109) { // A-M & a-m
output += (char)(ascii + 13);
} else if (ascii >= 78 && ascii <= 90 || ascii >= 110 && ascii <= 122) { // N-Z & n-z
output += (char)(ascii - 13);
} else {
output += letter;
}
}
return output;
}
}
...And now, SQL:
ALTER FUNCTION dbo.ROT13
(
@PLAINSTRING VARCHAR(255)
)
RETURNS VARCHAR(255)
AS
BEGIN
DECLARE @MAX INT = LEN(@PLAINSTRING)
DECLARE @COUNTER INT = 0
DECLARE @LETTER CHAR(1)
DECLARE @ENCODEDSTRING VARCHAR(255)
WHILE (@COUNTER < @MAX)
BEGIN
SET @LETTER = SUBSTRING(@PLAINSTRING, @COUNTER+1, 1);
IF(ASCII(@LETTER) BETWEEN 65 AND 77 OR ASCII(@LETTER) BETWEEN 97 AND 109) -- A-M and a-m
SET @ENCODEDSTRING = CONCAT(@ENCODEDSTRING, CHAR(ASCII(@LETTER)+13));
ELSE IF(ASCII(@LETTER) BETWEEN 78 AND 90 OR ASCII(@LETTER) BETWEEN 110 AND 122) -- N-Z and n-z
SET @ENCODEDSTRING = CONCAT(@ENCODEDSTRING, CHAR(ASCII(@LETTER)-13));
ELSE
SET @ENCODEDSTRING = CONCAT(@ENCODEDSTRING, @LETTER);
SET @COUNTER += 1
END
RETURN @ENCODEDSTRING
END
GO