为汉语名字生成首字母助记码

{生成字符串的助记码 }

Function GetZJM(Value: String):String;
var
  I, L: Integer;
  C: array[0..1] of Char;
  R: Char;
begin
  Result := '';
  L := Length(Value);
  I := 1;
  while I <= (L - 1) do
  begin
    if Value[I] <= #128 then
    begin
      Result := Result + Value[I];
      Inc(I);
    end
    else if Value[I] < #160 then
    begin
      Result := Result + Value[I];
      Inc(I,2);
    end
    else
    begin
      C[0] := Value[I];
      C[1] := Value[I + 1];
      R := GetHZM(C);
      if R <> #0 then
      Result := Result + R;
      Inc(I, 2);
    end;
  end;
  if I = L then
    Result := Result + Value[L];
end;

{获取汉字字符串的拼音码}

Function GetHZM(Value: array of char): Char;
begin
  Result := #0;
  case Byte(Value[0]) of
  176:
    case Byte(Value[1]) of
    161..196: Result := 'A';
    197..254: Result := 'B';
    end;
  177: Result := 'B';
  178:
  case Byte(Value[1]) of
    161..192: Result := 'B';
    193..205: Result := 'C';
    206: Result := 'S';
    207..254: Result := 'C';
  end;
  179: Result := 'C';
  180:
    case Byte(Value[1]) of
    161..237: Result := 'C';
    238..254: Result := 'D';
    end;
  181: Result := 'D';
  182:
    case Byte(Value[1]) of
    161..233: Result := 'D';
    234..254: Result := 'E';
    end;
  183:
    case Byte(Value[1]) of
    161: Result := 'E';
    162..254: Result := 'F';
  end;
  184:
    case Byte(Value[1]) of
    161..192: Result := 'F';
    193..254: Result := 'G';
    end;
  185:
    case Byte(Value[1]) of
    161..253: Result := 'G';
    254: Result := 'H';
    end;
  186: Result := 'H';
  187:
    case Byte(Value[1]) of
    161..246: Result := 'H';
    247..254: Result := 'J';
    end;
  188..190: Result := 'J';
  191:
    case Byte(Value[1]) of
    161..165: Result := 'J';
    166..254: Result := 'K';
    end;
  192:
    case Byte(Value[1]) of
    161..171: Result := 'K';
    172..254: Result := 'L';
    end;
  193: Result := 'L';
  194:
    case Byte(Value[1]) of
    161..231: Result := 'L';
    232..254: Result := 'M';
    end;
  195: Result := 'M';
  196:
    case Byte(Value[1]) of
    161..194: Result := 'M';
    195..254: Result := 'N';
    end;
  197:
    case Byte(Value[1]) of
    161..181: Result := 'N';
    182..189: Result := 'O';
    190..254: Result := 'P';
    end;
  198:
    case Byte(Value[1]) of
    161..217: Result := 'P';
    218..254: Result := 'Q';
    end;
  199: Result := 'Q';
  200:
    case Byte(Value[1]) of
    161..186: Result := 'Q';
    187..245: Result := 'R';
    246..254: Result := 'S';
    end;
  201..202: Result := 'S';
  203:
    case Byte(Value[1]) of
    161..249: Result := 'S';
    250..254: Result := 'T';
    end;
  204: Result := 'T';
  205:
    case Byte(Value[1]) of
    161..217: Result := 'T';
    218..254: Result := 'W';
    end;
  206:
    case Byte(Value[1]) of
    161..243: Result := 'W';
    244..254: Result := 'X';
    end;
  207..208: Result := 'X';
  209:
    case Byte(Value[1]) of
    161..184: Result := 'X';
    185..254: Result := 'Y';
    end;
  210..211: Result := 'Y';
  212:
    case Byte(Value[1]) of
    161..208: Result := 'Y';
    209..254: Result := 'Z';
    end;
  213..215: Result := 'Z';
  216..247:
    Result := ChnPy[Byte(Value[0])][Byte(Value[1]) - 160];
  end;
end;

原文地址:https://www.cnblogs.com/FuYan/p/3242926.html