C#如何制作pin码,只有按正确的顺序键入时才能解锁
我正在制作一个vault应用程序,要求按特定顺序输入代码(1 2 3) 现在我已经确定,按下12和3时保险库将解锁,但顺序一点也不重要。 我想让保险库仅在第一次、第二次和第三次按下按钮1时解锁C#如何制作pin码,只有按正确的顺序键入时才能解锁,c#,C#,我正在制作一个vault应用程序,要求按特定顺序输入代码(1 2 3) 现在我已经确定,按下12和3时保险库将解锁,但顺序一点也不重要。 我想让保险库仅在第一次、第二次和第三次按下按钮1时解锁 谢谢 将数字附加到字符串,然后将字符串与正确的PIN匹配 private static string THECORRECTPIN = "1234"; private string _PinEntered{get;set;} public void KeyPressed(string number) {
谢谢 将数字附加到字符串,然后将字符串与正确的PIN匹配
private static string THECORRECTPIN = "1234";
private string _PinEntered{get;set;}
public void KeyPressed(string number)
{
_PinEntered += number;//here's the important bit
if(_PinEntered == THECORRECTPIN)
{
Unlock();
}
}
你可能想得太多了
public bool VaultLock(string key)
{
if(key == "1234")
return true;
return false;
}
创建一个接受输入(一个字母)并使其移动到另一个状态的状态机。2. 状态可以是有效(所有输入都有效)、无效(需要更多输入)或错误(无法再次达到有效状态) 给它五个州: 1.开始,没有输入,输入1转换为状态2。 2.在输入2上转换为状态3。 3.在输入3上转换为状态4。 4.是有效状态,没有转换 5.错误状态,无转换 如果给定的输入表明当前状态没有可供转换的字符串,则转到错误状态 更新,这个概念可能会变得非常复杂,它形成了搜索引擎的基础。这一实施非常基本:
namespace Algorithms
{
public class Automaat
{
public const char Epsilon = default(char);
private Graph current, valid;
public Automaat(string text)
{
Graph start = new Graph();
valid = new Graph();
current = start;
foreach (var letter in text)
{
var next = new Graph();
current.SetTransition(next, letter);
current = next;
}
valid = current;
current = start;
}
public void Input(char symbol)
{
if (current != null)
current = current.Next(symbol);
}
public bool IsValid()
{
return current == valid;
}
/// <summary>
/// Holds connections to other graphs, the position of that graph in the array relative to the alphabet determines what symbol that link uses.
/// </summary>
private class Graph
{
private static char[] alphabet;
Graph[] nodes;
public Graph()
{
nodes = new Graph[26];
}
public void SetTransition(Graph graph, char symbol)
{
nodes[ConvertToIndex(symbol)] = graph;
}
public Graph Next(char symbol)
{
return nodes[ConvertToIndex(symbol)];
}
private int ConvertToIndex(char symbol)
{
return symbol - 'a';
}
}
}
}
命名空间算法
{
公共级自动驾驶仪
{
public const char Epsilon=默认值(char);
私有图形当前,有效;
公共自动编码(字符串文本)
{
图形开始=新图形();
valid=新图形();
电流=启动;
foreach(文本中的var字母)
{
var next=new Graph();
当前.SetTransition(下一个,字母);
当前=下一个;
}
有效=当前;
电流=启动;
}
公共无效输入(字符符号)
{
如果(当前!=null)
当前=当前。下一个(符号);
}
公共bool是有效的()
{
返回电流==有效;
}
///
///保持与其他图形的连接,该图形在数组中相对于字母表的位置决定链接使用的符号。
///
私有类图
{
私有静态字符[]字母表;
图[]节点;
公共图()
{
节点=新图形[26];
}
公共void SetTransition(图形、字符符号)
{
节点[转换索引(符号)]=图形;
}
公共图形下一步(字符符号)
{
返回节点[转换索引(符号)];
}
专用整数转换索引(字符符号)
{
返回符号-‘a’;
}
}
}
}
您如何接受/读取输入?你有什么代码可以分享吗?如果您将输入作为单个字符串构建,一个简单的解决方案是input==answer
,因为它必须精确匹配。将正确的组合(正确的PIN)和输入组合放入IEnumerable
(例如列表
或列表
)我希望这是一个游戏或者其他不需要安全的东西。否则,我建议你选修一门密码学课程,或者让懂密码学的人来修。谢谢你的回答,你能给我一个小的演示一下你的想法吗?我算是个新手。谢谢你的回复,你能不能给我一个你的想法的小例子?我是个新手。。