⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 define.pas

📁 利用手机短信信息实现充值的例子
💻 PAS
📖 第 1 页 / 共 3 页
字号:
   msg_tem:=SMS_body_change(msg_tem,changed);
end;
 // 长度是除去SMSC段(0891683108100005F0),从"11"开始算,除以2即得。
  if  leftstr(dest_temp,2)='00' then
  len_all:=inttostr((length(dest_temp+msg_tem) div 2)-1)
  else if  leftstr(dest_temp,4)='0891' then
  len_all:=inttostr((length(dest_temp+msg_tem) div 2)-9);
  
   send_str1:='at+cmgs='+len_all+#13;
   buf:=pchar(send_str1);
   len:=length(send_str1);

   int_temp:=sio_write(Port_tem,buf,len);
   
   if int_temp>0 then
   begin
   send_str2:=dest_temp+msg_tem+#26;
   buf:=pchar(send_str2);
   len:=length(send_str2);
   sleep(150);
   int_temp:=sio_write(Port_tem,buf,len)
   end;

  result:=int_temp;
end;



function send_at(Port_tem:integer):integer;
 var
  send_str1:string;
  len,int_temp:integer;
  buf:pchar;
begin
   send_str1:='at'+#13;
   buf:=pchar(send_str1);
   len:=length(send_str1);
   int_temp:=sio_write(Port_tem,buf,len);
  result:=int_temp;
end;

function send_cnmi(Port_tem:integer):integer;
 var
  send_str1:string;
  len,int_temp:integer;
  buf:pchar;
begin
   send_str1:='at+cnmi=1,1,0,0,1'+#13;
   buf:=pchar(send_str1);
   len:=length(send_str1);

   int_temp:=sio_write(Port_tem,buf,len);
   sleep(200);
  result:=int_temp;
end;

function send_ccfc(Port_tem:integer;mobile:string):integer;
 var
  send_str1:string;
  len,int_temp:integer;
  buf:pchar;
begin
   send_str1:='at+ccfc=0,3,"+86'+mobile+'",145,1'+#13;
   buf:=pchar(send_str1);
   len:=length(send_str1);
   int_temp:=sio_write(Port_tem,buf,len);
   result:=int_temp;

end;

 function send_cmgd(Port_tem,sms_id:integer):integer;
var  send_str:string;
    i,len:integer;
    buf:pchar;
 begin
     send_str:='at+cmgd='+inttostr(sms_id)+#13;
     buf:=pchar(send_str);
     len:=length(send_str);
     result:=sio_write(Port_tem,buf,len);
 end;

function send_cmgl(Port_tem:integer):integer;
var  send_str:string;
     len:integer;
    buf:pchar;
 begin
     send_str:='at+cmgl=4'+#13;
     buf:=pchar(send_str);
     len:=length(send_str);
  result:=sio_write(Port_tem,buf,len);
 end;

 function send_cmgr(Port_tem,sms_id:integer):integer;
 var  send_str:string;
     len:integer;
    buf:pchar;
 begin
     send_str:='at+cmgr='+inttostr(sms_id)+#13;
     buf:=pchar(send_str);
     len:=length(send_str);
     result:=sio_write(Port_tem,buf,len);

 end;

 function com_write(Port_id:integer;write_str:string):integer;
 var lenTT:INTEGER;
 begin
   lenTT:=length(write_str)+1;
   result:=sio_write(Port_id,pchar(write_str+#13),lenTT);
 end;



function GBToUcs2(s:string):string ;
var
  i,len,cur:Integer;
  swidestring:widestring;
  t,Result_remp:string;
begin
  swidestring:=s;   //转化为中文字符
  len:=Length(swidestring);
  i:=1;
 while i<=len do
  begin
  cur:=ord(swidestring[i]);
  FmtStr(t,'%4.4X',[cur]);
  Result_remp:=Result_remp+t;
  inc(i);
  end;
  Result:=Result_remp;
end;
        
 function Ucs2ToGB(s:string):WideString ;
var
  i: Integer;
  tempstr:string;
begin
  i:=0;
  while i<length(s)  do
  begin
  tempstr:=copy(s,i+1,4);
  Result:= Result+WideChar(strtoint(format('%d',[strtoint('$'+tempstr)])));
  inc(i,4)
  end;
end;


function sms_Mobile_change(Mobile:string):string ;
  var
    m_len,i,j:integer;
    output_mobile:string;
  begin
  m_len:=length(Mobile);
  if  m_len mod 2<>0 then
   begin
    Mobile:=Mobile+'F';
    m_len:=m_len+1
   end;

  for i:=1 to m_len do
 begin
  if i mod 2=1 then j:=i+1 else j:=i-1;
  output_mobile:=output_mobile+Mobile[j]
 end;

 result:=output_mobile;
end;

function push_body_change(sms_content:string):string;
 var url_temp,content,sms_temp:string;
    i:integer;
    sms_yy,urly,contenty:widestring;
 begin
  sms_yy:=widestring(sms_content);
  i:=pos('###',sms_yy);
  contenty:=leftstr(sms_yy,i-1);
  urly:=rightstr(sms_yy,length(sms_yy)-i-2);
  url_temp:=gbToUTF8(urly);
  content:=gbToUTF8(contenty);
  sms_temp:='00F500'+inttohex(((length(content+url_temp)+72) div 2),2)+'0B05040B8423F0000303010101060603AE81EA8DCA03056A0045C6080C03'+url_temp+'000103'+content+'000101';
  result:=sms_temp;
 end;

 function gbToUTF8(str:WideString): string;
var
  s: pchar;
  i: integer;
  tmp: string;
begin
  tmp := '';
  result := '';
  s := pchar(Utf8encode(str));
  for i := 0 to strlen(s)-1 do begin
    tmp := tmp + format('%2.2x', [ord(s[i])]);
  end;
  result := tmp;
end;


function DecodeSMS7Bit(PDU : string):string;
var OctetStr : string;
    OctetBin : string;
    Charbin  : string;
    PrevOctet: string;
    Counter  : integer;
    Counter2 : integer;
begin
  PrevOctet:='';
  Result:='';
  for Counter:=1 to length(PDU) do
    begin
      if length(PrevOctet)>=7 then     { if 7 Bit overflow on previous }
        begin
          if BinStrToInt1(PrevOctet)<>0 then
            Result:=Result+Chr(BinStrToInt1(PrevOctet))
          else Result:=Result+' ';
          PrevOctet:='';
        end;
      if Odd(Counter) then            { only take two nibbles at a time }
        begin
          OctetStr:=Copy(PDU,Counter,2);
          OctetBin:=HexToBin(pchar(OctetStr));
          Charbin:='';
          for Counter2:=1 to length(PrevOctet) do
            Charbin:=Charbin+PrevOctet[Counter2];
          for Counter2:=1 to 7-length(PrevOctet) do
            Charbin:=OctetBin[8-Counter2+1]+Charbin;
          if BinStrToInt1(Charbin)<>0 then Result:=Result+Chr(BinStrToInt1(CharBin))
            else Result:=Result+' ';
          PrevOctet:=Copy(OctetBin,1,length(PrevOctet)+1);
        end;
    end;
end;

function HexToBin(HexNr : string): string;
{ only stringsize is limit of binnr }
var Counter : integer;
begin
  Result:='';
  for Counter:=1 to length(HexNr) do
    Result:=Result+HexCharToBin(HexNr[Counter]);
end;

function HexCharToBin(HexToken : char): string;
var DivLeft : integer;
begin
    DivLeft:=HexCharToInt(HexToken);   { first HEX->BIN }
    Result:='';
                                       { Use reverse dividing }
    repeat                             { Trick; divide by 2 }
      if odd(DivLeft) then             { result = odd ? then bit = 1 }
        Result:='1'+Result             { result = even ? then bit = 0 }
      else
        Result:='0'+Result;
      DivLeft:=DivLeft div 2;       { keep dividing till 0 left and length = 4 }
    until (DivLeft=0) and (length(Result)=4);      { 1 token = nibble = 4 bits }
end;

 function HexCharToInt(HexToken : char):Integer;
begin
  {if HexToken>#97 then HexToken:=Chr(Ord(HexToken)-32);
  { use lowercase aswell }
  Result:=0;
  if (HexToken>#47) and (HexToken<#58) then       { chars 0....9 }
     Result:=Ord(HexToken)-48
  else if (HexToken>#64) and (HexToken<#71) then  { chars A....F }
     Result:=Ord(HexToken)-65 + 10;
end;

function BinStrToInt(BinStr : string) : integer;
var counter : integer;
begin
  if length(BinStr)>16 then
    raise ERangeError.Create(#13+BinStr+#13+
            'is not within the valid range of a 16 bit binary.'+#13);
  Result:=0;
  for counter:=1 to length(BinStr) do
      if BinStr[Counter]='1' then
        Result:=Result+pow(2,length(BinStr)-counter);
end;

function pow(base, power: integer): integer;
var counter : integer;
begin
  Result:=1;
  for counter:=1 to power do
    Result:=Result*base;
end;

function BinStrToInt1(BinStr : string) : integer;
var counter : integer;
begin
  if length(BinStr)>16 then
    raise ERangeError.Create(#13+BinStr+#13+
            'is not within the valid range of a 16 bit binary.'+#13);
  Result:=0;
  for counter:=1 to length(BinStr) do
      if BinStr[Counter]='1' then
        Result:=Result+pow(2,length(BinStr)-counter);
end;


function time_to_int(dateTIME:TDateTime):integer;
var dateTIME_str:string ;
begin
dateTIME_str:=FormatDateTime('yyyy-mm-dd hh:mm:ss',dateTIME);
result:=(strtoint(copy(dateTIME_str,12,2)))*3600+(strtoint(copy(dateTIME_str,15,2)))*60+(strtoint(copy(dateTIME_str,18,2)));
end;

function is_int(input:string):Boolean;
var i:integer;
    str_temp:string;
 begin
    result:=true ;

    str_temp:=trim(input);
    if str_temp<>'' then
    begin
    for i:=1 to length(str_temp) do
     begin
       if ((str_temp[i]>'9') or (str_temp[i]<'0')) and (str_temp[i]<>'-') then
       begin
       //showmessage(str_temp[i]);
       result:=false ;
       break;
       end;
     end;
   end
   else
   result:=false ;
 end;



 function GetIdeSerialNumber : pchar;
const IDENTIFY_BUFFER_SIZE = 512;
type
   TIDERegs = packed record
    bFeaturesReg     : BYTE; // Used for specifying SMART "commands".
    bSectorCountReg  : BYTE; // IDE sector count register
    bSectorNumberReg : BYTE; // IDE sector number register
    bCylLowReg       : BYTE; // IDE low order cylinder value
    bCylHighReg      : BYTE; // IDE high order cylinder value
    bDriveHeadReg    : BYTE; // IDE drive/head register
    bCommandReg      : BYTE; // Actual IDE command.
    bReserved        : BYTE; // reserved for future use.  Must be zero.
  end;
  TSendCmdInParams = packed record
    // Buffer size in bytes
    cBufferSize  : DWORD;
    // Structure with drive register values.
    irDriveRegs  : TIDERegs;
    // Physical drive number to send command to (0,1,2,3).
    bDriveNumber : BYTE;
    bReserved    : Array[0..2] of Byte;
    dwReserved   : Array[0..3] of DWORD;
    bBuffer      : Array[0..0] of Byte;  // Input buffer.
  end;

⌨️ 快捷键说明

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