ppublic.pas

来自「BarCodePrint条码打印机打印管理」· PAS 代码 · 共 120 行

PAS
120
字号
unit PPublic;
interface
Const MIN_ASC:Integer = 32;
Const MAX_ASC:Integer = 126;
Const NUM_ASC :Integer= 95;
function Cipher(password,from_text:String):String;
function MultiLink(Fang:Integer):LongInt;
function NumericPassword(password:String):LongInt;
function Decipher(password,from_text :String):String;
var
    UserCode:String;
    UserName:String;
    DepartCode:String;
    DepartName:String;
    sModelName:String;
    //function GetInspectionManNameFromCode(Code:String):String;
implementation
uses ADODB,PDataModuleMain;
function MultiLink(Fang:Integer):LongInt;
var
    i:Integer;
begin
    Result:=1;
    for i:=1 to Fang do
            Result:=Result*2
    end;
function NumericPassword(password:String):LongInt;
var
    value:LongInt;
    ch:LongInt;
    shift1:LongInt;
    shift2:LongInt;
    i:Integer;
    str_len:Integer;
    str:Char;
begin
    str_len :=length(password);
    shift1:=0;
    shift2:=0;
    value:=0;
    For i := 1 To str_len do
    begin
        str:=password[i];
        ch := Integer(str);
        value := value Xor (ch * MultiLink(shift1));
        value := value Xor (ch * MultiLink(shift2));

        shift1 := (shift1 + 7) Mod 19;
        shift2 := (shift2 + 13) Mod 23;
    end;
    NumericPassword := value;
end;
function Cipher(password,from_text:String):String;
var
    offset:LongInt;
    str_len:Integer;
    i:Integer;
    ch:Integer;
begin
    offset := NumericPassword(password);
    RandSeed:=offset;

    str_len := length(from_text);
    for i := 1 To str_len do begin
        ch := ord(from_text[i]);
        if (ch >= MIN_ASC) And (ch <= MAX_ASC) Then begin
            ch := ch - MIN_ASC;
            offset :=trunc((NUM_ASC + 1) * random);
            ch := ((ch + offset) Mod NUM_ASC);
            ch := ch + MIN_ASC;
            Result := Result + Chr(ch);
        end;
    end;
end;

function Decipher(password,from_text :String):String;
var
    offset:LongInt;
    str_len:Integer;
    i:Integer;
    ch:Integer;
begin
    offset:=NumericPassword(password);
    RandSeed:=offset;
    str_len := Length(from_text);
    for i :=1 To str_len do begin
        ch := ord(from_text[i]);
        If (ch >= MIN_ASC) And (ch <= MAX_ASC) Then begin
            ch := ch - MIN_ASC;
            offset :=trunc((NUM_ASC + 1) * Random);
            ch := ((ch - offset) Mod NUM_ASC);
            If ch < 0 Then ch := ch + NUM_ASC;
            ch := ch + MIN_ASC;
            Result:=Result+ Chr(ch);
        end;
    end;
End;

{function GetInspectionManNameFromCode(Code:String):String;
var
    ADODataSetTmp:TADODataSet;
begin
    GetInspectionManNameFromCode:='';
    ADODataSetTmp:=TADODataSet.Create(Nil);
    ADODataSetTmp.CommandType:=cmdText;
    ADODataSetTmp.CursorType:=ctOpenForwardOnly;
    ADODataSetTmp.LockType:=ltReadOnly;
    ADODataSetTmp.CommandText:='select * from InspectionMan where IMCode='+
                                    ''''+Code+'''';
    ADODataSetTmp.Connection:=DataModuleMain.ADOConnectionBarCode;
    ADODataSetTmp.Open;
    ADODataSetTmp.Connection:=Nil;
    if not ADODataSetTmp.Eof then
    GetInspectionManNameFromCode:=ADODataSetTmp.FieldByName('IMName').Value;
    ADODataSetTmp.Close;
    ADODataSetTmp.Free;
end;}

end.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?