Dragons Hobbies Forum
		General Category => General Discussions => Topic started by: Dragon on March 25, 2025, 23:19:08
		
			
			- 
				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