You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#控制台程序PIN验证问题:需实现精确匹配而非部分登录

解决PIN精确匹配问题

嘿,问题出在你用的Contains()方法上!这个方法的作用是检查输入的PIN是否是存储PIN的子串,而不是精确匹配。比如说,如果你的pin.txt里存的是1234,那输入12、34甚至1都会被判定为匹配,这就是为什么输入部分内容也能登录的原因。

修复方案

你需要把Contains()替换成精确相等的比较,同时还要注意处理文件内容可能存在的空白字符(比如换行符、空格)——用File.ReadAllText()读取文件时,可能会把文件末尾的换行也读进来,导致匹配失败。

修改后的代码片段如下:

Console.WriteLine("Please insert your credit card by pressing 'Enter'.");
Console.ReadKey();
Console.Write("Please enter your 4-digit PIN: ");
pin = Console.ReadLine();

// 读取存储的PIN并去除首尾空白(避免换行、空格干扰)
string storedPin = File.ReadAllText("C:/Users/ryanj/OneDrive/Documents/Random code/myApp/pin.txt").Trim();
// 使用精确相等比较,Ordinal参数确保无文化差异的严格匹配
bool pinVerif = string.Equals(storedPin, pin, StringComparison.Ordinal);

if(pinVerif) 
{ 
    verified(); 
} 
else 
{ 
    Console.WriteLine("Sorry your PIN was incorrect, please try again or exit the program."); 
    menu(); 
}

额外提醒

  • 确保你的pin.txt文件里只存储4位PIN码,不要有任何多余的字符(比如换行、空格),否则即使修改了代码也可能匹配失败。
  • 使用string.Equals()并指定StringComparison.Ordinal是更严谨的做法,它会忽略系统的文化设置,严格按照字符的ASCII值进行比较,避免一些意想不到的匹配问题。

内容的提问来源于stack exchange,提问作者rG_Infini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:29:47