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

📄 unit1.pas

📁 用于计算IMEI号码
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Unit2, ShellAPI; //调用其他窗体需要加入Unit

type
  TForm1 = class(TForm)
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    GroupBox1: TGroupBox;
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Button3: TButton;
    Button4: TButton;
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Edit2Change(Sender: TObject);
    procedure Edit3Change(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure RadioButton1Click(Sender: TObject);
    procedure RadioButton2Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  i,t,sum,even,even1,even2:integer;
  str,old_imei,reverse_imei,cd:string;
  imei_start,imei_end:string;
    //t表示批量循环缓存
   //sum代表IMEI中的D1~D14处理后的和
   //even代表2倍的奇数位
   //even1代表even的个位,evev2代表even的十位
   //old_imei代表处理前的IMEI,reverse_imei代表处理后的IMEI,cd代表Check Digit
   //imei_start代表批量开始数据;imei_end表示批量结束数据

   fp:textfile;

implementation

{$R *.dfm}


procedure TForm1.Button2Click(Sender: TObject);
begin
  close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Edit1.Text := '';
  Edit2.Text := '';
  Label1.Caption :='Input IMEI';
  Label2.Caption :='Output IMEI';
  Edit2.Enabled := false;
end;

procedure TForm1.Edit2Change(Sender: TObject);
begin
  Button1.Enabled := true;
end;

procedure TForm1.Edit3Change(Sender: TObject);
begin
  Button1.Enabled := true;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
     sum:=0;
     even:=0;
     even1:=0;
     even2:=0;
     str:='';
     reverse_imei:='';
     cd:='';
if RadioButton1.Checked = true then
  begin
      if length(Edit1.Text)<14 then    //判断输入框输入长度
        begin
          ShowMessage('Text length too short!');
          exit;   //退出过程
        end;
     //**************IMEI单个计算开始*******************
     old_imei:= Edit1.Text; //将oldimei1反向,这样从D1到D14处理比较符合大多数人从左到右的习惯
     for i:=14 downto 1 do
        begin
          str:=copy(old_imei,i,1);
          reverse_imei:=reverse_imei+str;
        end;
     //求和
     for i:=1 to 14 do
        begin
          if((i mod 2)=0) then
            begin
               sum:=sum+strtoint(copy(reverse_imei,i,1));
            end
          else
            begin
               even:=2*(strtoint(copy(reverse_imei,i,1)));
               even1:=even mod 10;
               even2:=even div 10;
               sum:=sum+even1+even2;
            end
        end;

        //生成CD位
        if ((sum mod 10)=0) then
        cd:='0'
        else
        cd:=inttostr(10-(sum mod 10));
         //生成新的15位IMEI,带CD位的
        reverse_imei:=old_imei+cd;
        Edit2.Text:=reverse_imei;

        AssignFile(fp,'imei.txt');
            if FileExists('imei.txt') then
                    begin
                     Append(fp);
                     writeln(fp,reverse_imei);
                     Closefile(fp);
                     end
                   else
                    begin
                     Rewrite(fp);
                     writeln(fp,reverse_imei);
                     Closefile(fp);
                    end;
   end
//**************IMEI单个计算结束*******************

else

  begin
//**************IMEI批量计算开始*******************
      imei_start:= Edit1.Text;
      imei_end:= Edit2.Text;

      if length(Edit1.Text)<14 then //判断输入框输入长度
        begin
          ShowMessage('Text length too short!');
          exit;
        end     //退出过程
       else
        begin
           if length(Edit2.Text)<14 then
              begin
                ShowMessage('Text length too short!');
                exit;
               end
              else
                begin
                   if strtoint64(imei_start)> strtoint64(imei_end) then
                     begin
                      ShowMessage('IMEI_start can not bigger the IMEI_end!');
                      exit;
                     end;
                end;
        end;

      //for t:= strtoint64(imei_start) to strtoint64(imei_end) do
      while strtoint64(imei_start)<=strtoint64(imei_end) do
         begin
          //***循环开始 ***
          for i:=14 downto 1 do
              begin
                 str:=copy(imei_start,i,1);
                 reverse_imei:=reverse_imei+str;
              end;
          //求和
          for i:=1 to 14 do
              begin
                  if((i mod 2)=0) then
                       begin
                          sum:=sum+strtoint(copy(reverse_imei,i,1));
                       end
                  else
                       begin
                          even:=2*(strtoint(copy(reverse_imei,i,1)));
                          even1:=even mod 10;
                          even2:=even div 10;
                          sum:=sum+even1+even2;
                       end;
              end;

          //生成CD位
          if ((sum mod 10)=0) then
              cd:='0'
          else
              cd:=inttostr(10-(sum mod 10));
              //生成新的15位IMEI,带CD位的
              reverse_imei:=imei_start+cd;
              //Edit2.Text:=reverse_imei;

              //写文件
              AssignFile(fp,'imei.txt');
                if FileExists('imei.txt') then
                    begin
                     Append(fp);
                     writeln(fp,reverse_imei);
                     Closefile(fp);
                     end
                   else
                    begin
                     Rewrite(fp);
                     writeln(fp,reverse_imei);
                     Closefile(fp);
                    end;
                 imei_start:= inttostr(strtoint64(imei_start)+1);
              end;
            ShowMessage('Process finished!');
            //读文件
            //AssignFile(fp,'imei.txt');
               //Reset(fp);
               //readln(fp,str);
               //showmessage(str);
               //Closefile(fp);
      //**************IMEI批量计算结束*******************
   end;
end;

procedure TForm1.RadioButton1Click(Sender: TObject);
begin
    if RadioButton1.Checked = true then
      Begin
        Label1.Caption :='Input IMEI';
        Label2.Caption :='Output IMEI';
        Edit2.MaxLength :=15;
      end;
end;

procedure TForm1.RadioButton2Click(Sender: TObject);
begin
    if RadioButton2.Checked =true then
      Begin
        Label1.Caption :='IMEI Start';
        Label2.Caption :='IMEI End';
        Edit2.MaxLength :=14;
        Edit2.Enabled := true;
      end;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
   Form2.Show;
   //Form1.Hide;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
   ShellExecute(GetActiveWindow,'open','imei.txt',nil,nil,SW_NORMAL);//打开TXT文件,如果是CHM将语句扩展名为*.chm即可。
 end;
end.




⌨️ 快捷键说明

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