Dragon's Hobbies

Blog

ROT13

by Dragon on 2025-03-26 03:19:08 UTC

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);
    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;
    }
  }
  return $output;
}

echo rot13('Hello World!') . '
';
echo rot13('AaMmNnZz') . '
';
echo rot13('ABCDefgHIJKlmnopQRStuvWXyz') . '
';



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


Search the site: