本文包含以下自定义函数:1、Base64编码函数。
2、Base64解码函数。
3、截取汉字子串函数,防止出现半个汉字现象。
4、人民币小写转换为大写函数。
1、Base64编码函数。
//Base64编码函数function Base64Encode(InputData: string): string;//; Var OutputData: StringconstBase64TableLength = 64;Base64Table: string[Base64TableLength] ='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+*'; Pad = '=';vari: integer;CurrentB, PrevB: byte;c: byte;s: char;InputLength: integer;OutputData: string;FilterDecodeInput: Boolean;function ValueToCharacter(value: byte; var character: char): Boolean;//******************************************************************// 将一个在0..Base64TableLength-1区间内的值,转换为与Base64编码相对应// 的字符来表示,如果转换成功则返回True//****************************************************************** beginresult := true;if (value > Base64TableLength - 1) thenresult := falseelsecharacter := Base64Table[value + 1];end;beginFilterDecodeInput := true;OutputData := '';InputLength := Length(InputData);i := 1;if (InputLength = 0) then begin// result := BASE64_OK;Exit;end;repeat// 第一次转换CurrentB := Ord(InputData[i]);i := i + 1;InputLength := InputLength - 1;c := (CurrentB shr 2);if not ValueToCharacter(c, s) then begin// result := BASE64_ERROR;Exit;end;OutputData := OutputData + s;PrevB := CurrentB;// 第二次转换if InputLength = 0 thenCurrentB := 0else beginCurrentB := Ord(InputData[i]);i := i + 1;end;InputLength := InputLength - 1;c := (PrevB and $03) shl 4 + (CurrentB shr 4);//取出XX后4位并将其左移4位与XX右移4位合并成六位if not ValueToCharacter(c, s) then{//检测取得的字符是否在Base64Table内} begin// result := BASE64_ERROR;Exit;end;OutputData := OutputData + s;PrevB := CurrentB;// 第三次转换if InputLength < 0 thens := Padelse beginif InputLength = 0 thenCurrentB := 0else beginCurrentB := Ord(InputData[i]);i := i + 1;end;InputLength := InputLength - 1;c := (PrevB and $0F) shl 2 + (CurrentB shr 6);//取出XX后4位并将其左移2位与XX右移6位合并成六位if not ValueToCharacter(c, s) then{//检测取得的字符是否在Base64Table内} begin// result := BASE64_ERROR;Exit;end;end;OutputData := OutputData + s;// 第四次转换if InputLength < 0 thens := Padelse beginc := (CurrentB and $3F); //取出XX后6位if not ValueToCharacter(c, s) then{//检测取得的字符是否在Base64Table内} begin// result := BASE64_ERROR;Exit;end;end;OutputData := OutputData + s;until InputLength <= 0;result := OutputData;end;2、Base64解码函数。
function Base64Decode(InputData: string): string;constBase64TableLength = 64;Base64Table: string[Base64TableLength] ='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+*'; Pad = '=';vari: integer;InputLength: integer;CurrentB, PrevB: byte;c: byte;s: char;OutputData: string;FilterDecodeInput: Boolean;function CharacterToValue(character: char; var value: byte): Boolean;//****************************************************************** // 转换字符为一在0..Base64TableLength-1区间中的值,如果转换成功则返// 回True(即字符在Base64Table中)//****************************************************************** beginresult := true;value := Pos(character, Base64Table);if value = 0 thenresult := falseelsevalue := value - 1;end;function FilterLine(InputData: string): string;//****************************************************************** // 过滤所有不在Base64Table中的字符,返回值为过滤后的字符//****************************************************************** varF: byte;i: integer;beginresult := '';for i := 1 to Length(InputData) doif CharacterToV alue(InputData[i], F) or (InputData[i] = Pad) thenresult := result + InputData[i];end;beginFilterDecodeInput := true;if (InputData = '') then begin// result := BASE64_OK;Exit;end;OutputData := '';if FilterDecodeInput thenInputData := FilterLine(InputData);InputLength := Length(InputData);if InputLength mod 4 <> 0 then begin// result := BASE64_LENGTH;Exit;end;i := 0;repeat// 第一次转换i := i + 1;s := InputData[i];if not CharacterToValue(s, CurrentB) then begin // result := BASE64_INV ALID;Exit;end;i := i + 1;s := InputData[i];if not CharacterToValue(s, PrevB) then begin// result := BASE64_INV ALID;Exit;end;c := (CurrentB shl 2) + (PrevB shr 4);OutputData := OutputData + Chr(c);// 第二次转换i := i + 1;s := InputData[i];if s = Pad then beginif (i <> InputLength - 1) then begin// result := BASE64_DATALEFT;Exit;endelseif InputData[i + 1] <> Pad then begin// result := BASE64_PADDING;Exit;end;endelse beginif not CharacterToValue(s, CurrentB) then begin // result := BASE64_INV ALID;Exit;end;c := (PrevB shl 4) + (CurrentB shr 2);OutputData := OutputData + Chr(c);end;// 第三次转换i := i + 1;s := InputData[i];if s = Pad then beginif (i <> InputLength) then begin// result := BASE64_DATALEFT;Exit;end;endelse beginif not CharacterToValue(s, PrevB) then begin// result := BASE64_INV ALID;Exit;end;c := (CurrentB shl 6) + (PrevB);OutputData := OutputData + Chr(c);end;until (i >= InputLength);result := OutputData;end;3、截取汉字子串函数,防止出现半个汉字现象。