包含 a-z、A-Z、0-9,如果要追加符号,按序增加在数组$string_arr内,并修改mt_rand(1, 62)的第二个参数为增加后的数组的最大键值。

<?php
function rand_string($lenght){
    $string_arr = [
        1 => 'a', 2 => 'b', 3 => 'c', 4 => 'd', 5 => 'e', 6 => 'f', 7 => 'g',
        8 => 'h', 9 => 'i', 10 => 'j', 11 => 'k', 12 => 'l', 13 => 'm', 14 => 'n',
        15 => 'o', 16 => 'p', 17 => 'q', 18 => 'r', 19 => 's', 20 => 't', 21 => 'u',
        22 => 'v', 23 => 'w', 24 => 'x', 25 => 'y', 26 => 'z', 27 => 'A', 28 => 'B',
        29 => 'C', 30 => 'D', 31 => 'E', 32 => 'F', 33 => 'G', 34 => 'H', 35 => 'I',
        36 => 'J', 37 => 'K', 38 => 'L', 39 => 'M', 40 => 'N', 41 => 'O', 42 => 'P',
        43 => 'Q', 44 => 'R', 45 => 'S', 46 => 'T', 47 => 'U', 48 => 'V', 49 => 'W',
        50 => 'X', 51 => 'Y', 52 => 'Z', 53 => '1', 54 => '2', 55 => '3', 56 => '4',
        57 => '5', 58 => '6', 59 => '7', 60 => '8', 61 => '9', 62 => '0'
    ];
    $res = "";
    for($i = 0; $i < $lenght; $i++){
        $res .= $string_arr[mt_rand(1, 62)];
    }
    return $res;
}

//关闭本窗口,如果不是主窗口或有托管线程无法完全退出
this.Close();

//终止所有线程的消息,然后关闭所有窗口,如果有托管线程无法完全退出
Application.Exit();

//终止当前线程的消息,然后关闭所有窗口,如果有托管线程无法完全退出
Application.ExitThread();

//彻底退出,终止此进程并返回代码给操作系统
System.Environment.Exit(0);

设计的一个项目需要客户端离线使用的同时控制使用时间,如果获取本地时间判断容易被欺骗,用带时钟的加密狗无法提前结束或者追加时长,就想到了以下方法

1、提前在程序中保存:ID、本机密码、验证码接口,其中本机密码是不可让用户知道的。
2、程序运行时随机生成一串数字,将ID与随机数拼接在接口后作为GET参数提交,生成二维码显示。
3、用户扫码打开网页,服务器根据ID判断用户身份,获取对应密码,然后按 md5(ID + 9位数 + 密码)来计算MD5,取前四位显示。
4、用户输入软件,软件按相同方式计算MD5取前四位比对判断是否正确。




- 阅读剩余部分 -

编写了一个登录框,需要在用户按回车时进行提交,可以为输入框添加KeyUp事件函数,然后在函数内写

if (e.KeyCode == Keys.Control || e.KeyCode == Keys.Enter)
{
    //要执行的代码
}

测试发现如果使用了MessageBox.Show(),在弹出窗口上按回车确认也会再次触发这个事件,我的解决方法是弹窗前先清空输入框内容,然后在事件函数执行时判断一下输入框是否为空

if (this.InputBox.Text.Count() != 0)
{
    if (e.KeyCode == Keys.Control || e.KeyCode == Keys.Enter)
    {
        //要执行的代码
        this.InputBox.Text = String.Empty;
    }
}

String inputString = "要处理的字符串";
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] data = System.Text.Encoding.UTF8.GetBytes(inputString);
byte[] md5Data = md5.ComputeHash(data, 0, data.Length);
md5.Clear();
String resule= String.Empty;
for (int i = 0; i < md5Data.Length; i++)
{
    resule += System.Convert.ToString(md5Data[i], 16).PadLeft(2, '0');
}
resule= resule.PadLeft(32, '0');

MessageBox.Show(resule);

//获取执行目录
String startPath = System.Windows.Forms.Application.StartupPath;

//获取执行盘符
String startDisk = System.Windows.Forms.Application.StartupPath.Substring(0, 1);

创建一个7-Zip进程解压文件:

System.Diagnostics.Process unZipProcess = new System.Diagnostics.Process();
unZipProcess.StartInfo.FileName = @"C:\7zG.exe";                                   //执行文件
unZipProcess.StartInfo.Arguments = " x \"压缩文件\" -o\"输出路径\" -aoa";            //执行参数
unZipProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; //表示隐藏窗口
unZipProcess.Start();                                        //开始执行
unZipProcess.WaitForExit();                                  //等待进程结束
//unZipProcess.WaitForExit(1000);                            //等待进程结束,设置等待时间最多为1000毫秒
//unZipProcess.Kill();                                       //强制结束进程
unZipProcess.Close();                                        //释放资源

执行CMD命令类似,多了几项设置,释义忘了,可以用VS鼠标悬停看说明

System.Diagnostics.Process cmdProcess = new System.Diagnostics.Process();
cmdProcess.StartInfo.FileName = "cmd.exe";
cmdProcess.StartInfo.UseShellExecute = false;
cmdProcess.StartInfo.RedirectStandardInput = true;
cmdProcess.StartInfo.RedirectStandardOutput = true;
cmdProcess.StartInfo.RedirectStandardError = true;

//隐藏窗口执行
cmdProcess.StartInfo.CreateNoWindow = true;
cmdProcess.Start();

//执行命令,在命令后面带上exit可以让cmd执行完成后退出,否则执行`WaitForExit()`且不指定超时时间会假死
cmdProcess.StandardInput.WriteLine("ping 127.0.0.1&exit");

//可以多次调用此方法来执行多条命令,执行完所有命令后再执行exit
//但要注意每次提交完命令要等待一定时间再执行下一个,否则会失败
//cmdProcess.StandardInput.WriteLine("ipconfig /release");
//System.Threading.Thread.Sleep(500);
//cmdProcess.StandardInput.WriteLine("ipconfig /renew");
//System.Threading.Thread.Sleep(500);
//cmdProcess.StandardInput.WriteLine("exit");

cmdProcess.StandardInput.AutoFlush = true;

//获取返回值
String OutputData = cmdProcess.StandardOutput.ReadToEnd();

//等待进程退出,可以指定超时时间
cmdProcess.WaitForExit();

//关闭
cmdProcess.Close();

String stringObject = "Hello";

stringObject.Substring(0, 1);
// 截取字符串第一位

stringObject.Substring(StringObject.Lenght - 1, 1);
// 截取字符串最后一位