[Back to ENCRYPT SWAG index] [Back to Main SWAG index] [Original]

    {
    REYNIR STEFANSSON

    Somebody was saying something about Soundex hashing. Here is my
    Implementation of that:
    }

    Unit Soundex;

    Interface

    Type
      Sdx4 = String[4];

    Function SoundexOf(WorkStr : String) : Sdx4;

    Implementation

    Var
      Group : Array[0..6] of String[8];

    Function ValidityOf(Letter : Char) : Char;
    Var
      Valu, j : Integer;
      Chs     : String[8];
    begin
      For Valu := 0 to 6 DO
      begin
        Chs := Group[Valu];
        For j := 1 to Length(Chs) DO
        begin
          if UpCase(Letter) = Chs[j] then
            ValidityOf := Chr(48+Valu);
        end;
      end;
    end;

    Function SoundexOf(WorkStr : String) : Sdx4;
    Var
      Sndex : Sdx4;
      Oval,
      Valu  : Char;
      i     : Integer;
    begin
      Sndex := Copy(WorkStr, 1, 1);
      Oval  := ValidityOf(WorkStr[1]);
      For i := 2 to Length(WorkStr) DO
      begin
        Valu := ValidityOf(WorkStr[i]);
        if (Valu <> '0') and (Valu <> Oval) then
          Sndex := Sndex + Valu;
        Oval := Valu;
      end;
      Sndex := Sndex + '000';
      SoundexOf := Sndex;
    end;

    begin
      Group[0] := 'AEHIOUWY';
      Group[1] := 'BFPV';
      Group[2] := 'CGJKQSXZ';
      Group[3] := 'DT';
      Group[4] := 'L';
      Group[5] := 'MN';
      Group[6] := 'R';
    end.

    {
    A Soundex-String looks like: `G032', one letter and three numbers.
    Donald Knuth wrote about Soundexing in his _Art of Computer Programming_
    series. I got my information out of Personal ComputerWorld (PCW), which in
    turn got it from Knuth.
    }

[Back to ENCRYPT SWAG index] [Back to Main SWAG index] [Original]