/* * 更 新 */ public int update(Cfg2 entity) { string sql = "update cfg2 set sd=@sd,cd=@cd,ld=@ld" + ",rg1=@rg1,rg3=@rg3,validateCode=@validateCode" + " where id=@id"; SQLiteParameter[] parameters = { new SQLiteParameter("@sd", DbType.String, 200), new SQLiteParameter("@cd", DbType.String, 200), new SQLiteParameter("@ld", DbType.String, 200), new SQLiteParameter("@rg1", DbType.String, 200), new SQLiteParameter("@rg3", DbType.String, 200), new SQLiteParameter("@validateCode", DbType.String, 200), new SQLiteParameter("@id", DbType.Int32, 4) }; parameters[0].Value = entity.sd; parameters[1].Value = entity.cd; parameters[2].Value = entity.ld; parameters[3].Value = entity.rg1; parameters[4].Value = entity.rg3; parameters[5].Value = entity.validateCode; parameters[6].Value = entity.id; int result = Common.SQLiteHelper.ExecuteNonQuery(sql, parameters, Common.SQLiteHelper.connectionString_reg); return(result); }
/* * 提交注册码 * * 1.永久注册码 * * 2.有有效期的注册码 */ private void Reg_Submit_Button_Click(object sender, RoutedEventArgs e) { string regCodeVal = regCodeText.Text; if (string.IsNullOrWhiteSpace(regCodeVal)) { MessageBox.Show("请填写注册码"); return; } bool isRight = RegCodeUtil.isRightOfRegCode(regCodeVal, machineCodeVal); //1.注册码正确 if (isRight) { //更新注册码到数据库,并显示注册成功 Cfg2 cfg21 = cfg2Bll.get(1); cfg21.rg3 = regCodeVal; string validateCode1 = RegCodeUtil.generateValidateCode(cfg21, machineCodeVal); cfg21.validateCode = validateCode1; cfg2Bll.update(cfg21); successGrid.Visibility = Visibility.Visible; regGrid.Visibility = Visibility.Collapsed; return; } // 2.判断是否为有效期注册码 int limitDay = RegCodeUtil.isRightOfLimitDayRegCode(regCodeVal, machineCodeVal); if (limitDay <= 0) { MessageBox.Show("注册码无效,请重试"); return; } //更新注册码到数据库 Cfg2 cfg2 = cfg2Bll.get(1); cfg2.ld = EncryptionUtil.encode(limitDay.ToString(), machineCodeVal); string validateCode = RegCodeUtil.generateValidateCode(cfg2, machineCodeVal); cfg2.validateCode = validateCode; cfg2Bll.update(cfg2); //显示剩余试用天数 TimeSpan ts1 = DateTime.Now - DateTime.Parse("1970-1-1"); int currDay = (int)Math.Floor(ts1.TotalDays); int leaveDays = limitDay - currDay; tipsLabel.Content = leaveDays + "天后,试用到期"; tips.Visibility = Visibility.Visible; successGrid.Visibility = Visibility.Visible; regGrid.Visibility = Visibility.Collapsed; }
/* * 数据完整性校验 */ public static Boolean validate(Cfg2 cfg2, string machineCode) { string rightVaidateCode = generateValidateCode(cfg2, machineCode); if (cfg2.validateCode == rightVaidateCode) { return(true); } return(false); }
/* * 生成校验码 */ public static string generateValidateCode(Cfg2 cfg2, string machineCode) { string AppSecret = Md5Util.generate(Params.salt1 + machineCode + Params.salt2); string str = cfg2.sd; str = str + "&" + cfg2.cd; str = str + "&" + cfg2.ld; str = str + "&" + cfg2.rg1; str = str + "&" + cfg2.rg3; str = str + "&" + AppSecret; return(Md5Util.generate(str)); }
//通过id获取cfg public Cfg2 get(int id) { String sql = "select * from cfg2 where id=@id"; SQLiteParameter[] parameters = { new SQLiteParameter("@id", DbType.Int32, 4) }; parameters[0].Value = id; DataTable dt = Common.SQLiteHelper.ExecuteQuery(sql, parameters, Common.SQLiteHelper.connectionString_reg); Cfg2 cfg = DataToEntity <Cfg2> .FillModel(dt.Rows[0]); return(cfg); }
/* * 初始化 */ private void init() { //1.获取软件是否已注册 Boolean b = isRegistered(); if (b) { successGrid.Visibility = Visibility.Visible; regGrid.Visibility = Visibility.Collapsed; return; } //2.如果未注册,则显示注册界面 successGrid.Visibility = Visibility.Collapsed; regGrid.Visibility = Visibility.Visible; machineCodeText.Text = machineCodeVal; //获取截止日期 int leaveDays = 30; TimeSpan ts1 = DateTime.Now - DateTime.Parse("1970-1-1"); int currDay = (int)Math.Floor(ts1.TotalDays); Cfg2 cfg2 = cfg2Bll.get(1); string ld = cfg2.ld; if (!string.IsNullOrWhiteSpace(ld)) { string tmp = EncryptionUtil.decode(ld, machineCodeVal); if (DataUtil.isInt(tmp)) { int limitDay = int.Parse(tmp); leaveDays = limitDay - currDay; } } rtipsLabel.Content = leaveDays + "天后,试用到期"; }
/* * 软件是否已注册 */ private Boolean isRegistered() { //1.获取数据库信息 Cfg2 cfg2 = cfg2Bll.get(1); string machineCode = MachineCodeUtil.GetMachineCodeString(); machineCodeVal = machineCode; //2.数据完整性校验 if (RegCodeUtil.validate(cfg2, machineCode) == false) { return(false); } //3.注册码验证 if (RegCodeUtil.isRightOfRegCode(cfg2.rg3, machineCode) == false) { return(false); } return(true); }
/* * 更新 */ public Cfg2 update(Cfg2 cfg2) { int rows = cfg2Dal.update(cfg2); return(cfg2); }
//通过id获取cfg public Cfg2 get(Int32 id) { Cfg2 cfg = cfg2Dal.get(id); return(cfg); }
/* * 验证是否注册 * * errorCode=1001,提示用户,点击关闭软件(需要注册) * * errorCode=1002,提示用户,可以继续试用(非静默试用) * * errorCode=1003,不提示用户,继续试用(静默试用) * */ public BaseResult isReg() { BaseResult baseResult = new BaseResult(); baseResult.result = false; baseResult.errorCode = 1001; baseResult.message = "未知"; //1.获取数据库信息,并验证数据完整性 Cfg2 cfg2 = cfg2Bll.get(1); string machineCode = MachineCodeUtil.GetMachineCodeString(); //3.注册码是否存在,存在则验证 if (!string.IsNullOrWhiteSpace(cfg2.rg3)) { if (RegCodeUtil.isRightOfRegCode(cfg2.rg3, machineCode)) { baseResult.result = true; baseResult.errorCode = 0; baseResult.message = "注册码正确"; return(baseResult); } else { baseResult.result = false; baseResult.errorCode = 1001; baseResult.message = "注册码无效"; return(baseResult); } } //4.验证数据库注册日期是否存在,不存在则填写 if (!string.IsNullOrWhiteSpace(cfg2.sd)) { if (cfg2.sd == "sgfdo_fdgrexfhtreKUFSSA") { //第一次打开软件 TimeSpan ts1 = DateTime.Now - DateTime.Parse("1970-1-1"); int regDay = (int)Math.Floor(ts1.TotalDays); cfg2.sd = EncryptionUtil.encode(regDay.ToString(), machineCode); cfg2.cd = cfg2.sd; if (string.IsNullOrWhiteSpace(cfg2.ld)) { int limitDay = regDay + 30; cfg2.ld = EncryptionUtil.encode(limitDay.ToString(), machineCode); } string validateCode1 = RegCodeUtil.generateValidateCode(cfg2, machineCode); cfg2.validateCode = validateCode1; cfg2 = cfg2Bll.update(cfg2); baseResult.result = false; baseResult.errorCode = 1003; baseResult.message = "第一次打开软件"; return(baseResult); } } else { baseResult.result = false; baseResult.errorCode = 1001; baseResult.message = "注册日期异常(空),试用结束"; return(baseResult); } //2.数据完整性校验 if (RegCodeUtil.validate(cfg2, machineCode) == false) { baseResult.result = false; baseResult.errorCode = 1001; baseResult.message = "数据完整性校验失败"; return(baseResult); } //5.1 获取开始时间 string sdStr = EncryptionUtil.decode(cfg2.sd, machineCode); if (!DataUtil.isInt(sdStr)) { baseResult.result = false; baseResult.errorCode = 1001; baseResult.message = "注册日期异常(非整数),试用结束"; return(baseResult); } else if (Int32.Parse(sdStr) < 0) { baseResult.result = false; baseResult.errorCode = 1001; baseResult.message = "注册日期异常(小于0),试用结束"; return(baseResult); } int sd = DataUtil.ToInt(sdStr); //5.2获取数据库中截止日期 string ldStr = EncryptionUtil.decode(cfg2.ld, machineCode); int ld = DataUtil.ToInt(ldStr); //5.3获取数据库中当前时间 string cdStr_old = EncryptionUtil.decode(cfg2.cd, machineCode); int cd_old = DataUtil.ToInt(cdStr_old); //5.4 获取当前时间,并比较 TimeSpan ts2 = DateTime.Now - DateTime.Parse("1970-1-1"); int cd = (int)Math.Floor(ts2.TotalDays); if (cd_old > cd) { baseResult.result = false; baseResult.errorCode = 1001; baseResult.message = "计算机时间异常,试用结束"; return(baseResult); } //6.注册日期>截止日期,试用结束 if (cd > ld) { baseResult.result = false; baseResult.errorCode = 1001; baseResult.message = "试用结束"; return(baseResult); } //7. 更新当前日期 cfg2.cd = EncryptionUtil.encode(cd.ToString(), machineCode); string validateCode2 = RegCodeUtil.generateValidateCode(cfg2, machineCode); cfg2.validateCode = validateCode2; cfg2 = cfg2Bll.update(cfg2); //8. 剩余试用天数,当restDays<10,则弹窗提示 int restDays = ld - cd; if (restDays < 10) { baseResult.result = false; baseResult.errorCode = 1002; baseResult.message = restDays + " 天后,试用结束"; return(baseResult); } baseResult.result = false; baseResult.errorCode = 1003; baseResult.message = restDays + " 天后,试用结束"; return(baseResult); //baseResult.result = false; //baseResult.errorCode = 1002; //baseResult.message = restDays + " 天后,试用结束"; //return baseResult; }