Fork me on GitHub

C#不用正则校验密码(附赠正则表达式)

群聊

  • 群友A问:有没有方法可以判断字符串里面带不带标点符号啊?
  • 群友B问:需求是什么?
  • 群友A说:想要密码校验,网上大部分都是正则。
  • 群友A说:密码规则是包含大小写和数字、特殊符号,还有Length>=8。

我直接在LINQPad手撸基于ASCII码表的校验密码方法发到群里。
该实现逻辑,几乎任何编程语言都通用,可借鉴

工具类

public static class Utils
{
	public static bool ValidPassword(string password, int minLength = 8, int maxLength = 20)
	{
		if (string.IsNullOrEmpty(password) || password.Length < minLength || password.Length > maxLength)
		{
			return false;
		}

		bool hasLower = false;
		bool hasUpper = false;
		bool hasNumber = false;
		bool hasSymbol = false;
		foreach (ushort item in password)
		{
			if (item < 33 || item > 126)
			{
				return false;
			}

			if (item >= 48 && item <= 57)
			{
				hasNumber = true;
				continue;
			}

			if (item >= 65 && item <= 90)
			{
				hasUpper = true;
				continue;
			}

			if (item >= 97 && item <= 122)
			{
				hasLower = true;
				continue;
			}

			hasSymbol = true;
		}

		return hasLower && hasUpper && hasNumber && hasSymbol;
	}
}

测试代码

class Program
{
	static void Main(params string[] args)
	{
		TestValidPassword();
	}

	static void TestValidPassword()
	{
		Console.WriteLine(Utils.ValidPassword("Abcd1234.!"));
		Console.WriteLine(Utils.ValidPassword("abcd1234."));
		Console.WriteLine(Utils.ValidPassword("abcd12345"));
		Console.WriteLine(Utils.ValidPassword("abced!.-/*"));
		Console.WriteLine(Utils.ValidPassword("Abcd1234我"));
	}
}

附赠正则表达式

密码规则:包含 数字,大小写,特殊字符^%&',;=?$\",长度8~20位。
其中x22是双引号"的转义。

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^%&',;=?$\x22])[A-Za-z0-9^%&',;=?$\x22]{8,20}$

ASCII码表

ASCII 控制字符 (字符编码: 0-31)

ASCII码表中,前32个字符是不能用于打印控制的编码,而是用于控制像打印机一样的外围设备。

十进制 DEC 八进制 OCT 十六进制 HEX 二进制 BIN 符号 Symbol HTML实体编码 中文解释 Description 英文解释 Description
0 000 00 00000000 NUL &#000; 空字符 Null char
1 001 01 00000001 SOH &#001; 标题开始 Start of Heading
2 002 02 00000010 STX &#002; 正文开始 Start of Text
3 003 03 00000011 ETX &#003; 正文结束 End of Text
4 004 04 00000100 EOT &#004; 传输结束 End of Transmission
5 005 05 00000101 ENQ &#005; 询问 Enquiry
6 006 06 00000110 ACK &#006; 收到通知 Acknowledgment
7 007 07 00000111 BEL &#007; Bell
8 010 08 00001000 BS &#008; 退格 Back Space
9 011 09 00001001 HT &#009; 水平制表符 Horizontal Tab
10 012 0A 00001010 LF &#010; 换行键 Line Feed
11 013 0B 00001011 VT &#011; 垂直制表符 Vertical Tab
12 014 0C 00001100 FF &#012; 换页键 Form Feed
13 015 0D 00001101 CR &#013; 回车键 Carriage Return
14 016 0E 00001110 SO &#014; 移出 Shift Out / X-On
15 017 0F 00001111 SI &#015; 移入 Shift In / X-Off
16 020 10 00010000 DLE &#016; 数据链路转义 Data Line Escape
17 021 11 00010001 DC1 &#017; 设备控制 1 Device Control 1 (oft. XON)
18 022 12 00010010 DC2 &#018; 设备控制 2 Device Control 2
19 023 13 00010011 DC3 &#019; 设备控制 3 Device Control 3 (oft. XOFF)
20 024 14 00010100 DC4 &#020; 设备控制 4 Device Control 4
21 025 15 00010101 NAK &#021; 拒绝接收 Negative Acknowledgement
22 026 16 00010110 SYN &#022; 同步空闲 Synchronous Idle
23 027 17 00010111 ETB &#023; 传输块结束 End of Transmit Block
24 030 18 00011000 CAN &#024; 取消 Cancel
25 031 19 00011001 EM &#025; 介质中断 End of Medium
26 032 1A 00011010 SUB &#026; 替换 Substitute
27 033 1B 00011011 ESC &#027; 换码符 Escape
28 034 1C 00011100 FS &#028; 文件分隔符 File Separator
29 035 1D 00011101 GS &#029; 组分隔符 Group Separator
30 036 1E 00011110 RS &#030; 记录分离符 Record Separator
31 037 1F 00011111 US &#031; 单元分隔符 Unit Separator
ASCII 打印字符 (字符编码: 32-127)

32~126(共95个)是字符:32是空格,其中48~57为0到9十个阿拉伯数字,65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。第127个字符表示的是键盘上的删除命令。

十进制 DEC 八进制 OCT 十六进制 HEX 二进制 BIN 符号 Symbol HTML实体编码 中文解释 Description 英文解释 Description
32 040 20 00100000   &#032; 空格 Space
33 041 21 00100001 ! &#033; 感叹号 Exclamation mark
34 042 22 00100010 " &#034; 双引号 Double quotes (or speech marks)
35 043 23 00100011 # &#035; 井号 Number
36 044 24 00100100 $ &#036; 美元符 Dollar
37 045 25 00100101 % &#037; 百分号 Per cent sign
38 046 26 00100110 & &#038; Ampersand
39 047 27 00100111 ' &#039; 单引号 Single quote
40 050 28 00101000 ( &#040; 左括号 Open parenthesis (or open bracket)
41 051 29 00101001 ) &#041; 右括号 Close parenthesis (or close bracket)
42 052 2A 00101010 * &#042; 星号 Asterisk
43 053 2B 00101011 + &#043; 加号 Plus
44 054 2C 00101100 , &#044; 逗号 Comma
45 055 2D 00101101 - &#045; 连字号或减号 Hyphen
46 056 2E 00101110 . &#046; 句点或小数点 Period, dot or full stop
47 057 2F 00101111 / &#047; 斜杠 Slash or divide
48 060 30 00110000 0 &#048; 0 Zero
49 061 31 00110001 1 &#049; 1 One
50 062 32 00110010 2 &#050; 2 Two
51 063 33 00110011 3 &#051; 3 Three
52 064 34 00110100 4 &#052; 4 Four
53 065 35 00110101 5 &#053; 5 Five
54 066 36 00110110 6 &#054; 6 Six
55 067 37 00110111 7 &#055; 7 Seven
56 070 38 00111000 8 &#056; 8 Eight
57 071 39 00111001 9 &#057; 9 Nine
58 072 3A 00111010 : &#058; 冒号 Colon
59 073 3B 00111011 ; &#059; 分号 Semicolon
60 074 3C 00111100 < &#060; 小于 Less than (or open angled bracket)
61 075 3D 00111101 = &#061; 等号 Equals
62 076 3E 00111110 > &#062; 大于 Greater than (or close angled bracket)
63 077 3F 00111111 ? &#063; 问号 Question mark
64 100 40 01000000 @ &#064; 电子邮件符号 At symbol
65 101 41 01000001 A &#065; 大写字母 A Uppercase A
66 102 42 01000010 B &#066; 大写字母 B Uppercase B
67 103 43 01000011 C &#067; 大写字母 C Uppercase C
68 104 44 01000100 D &#068; 大写字母 D Uppercase D
69 105 45 01000101 E &#069; 大写字母 E Uppercase E
70 106 46 01000110 F &#070; 大写字母 F Uppercase F
71 107 47 01000111 G &#071; 大写字母 G Uppercase G
72 110 48 01001000 H &#072; 大写字母 H Uppercase H
73 111 49 01001001 I &#073; 大写字母 I Uppercase I
74 112 4A 01001010 J &#074; 大写字母 J Uppercase J
75 113 4B 01001011 K &#075; 大写字母 K Uppercase K
76 114 4C 01001100 L &#076; 大写字母 L Uppercase L
77 115 4D 01001101 M &#077; 大写字母 M Uppercase M
78 116 4E 01001110 N &#078; 大写字母 N Uppercase N
79 117 4F 01001111 O &#079; 大写字母 O Uppercase O
80 120 50 01010000 P &#080; 大写字母 P Uppercase P
81 121 51 01010001 Q &#081; 大写字母 Q Uppercase Q
82 122 52 01010010 R &#082; 大写字母 R Uppercase R
83 123 53 01010011 S &#083; 大写字母 S Uppercase S
84 124 54 01010100 T &#084; 大写字母 T Uppercase T
85 125 55 01010101 U &#085; 大写字母 U Uppercase U
86 126 56 01010110 V &#086; 大写字母 V Uppercase V
87 127 57 01010111 W &#087 大写字母 W Uppercase W
88 130 58 01011000 X &#088; 大写字母 X Uppercase X
89 131 59 01011001 Y &#089; 大写字母 Y Uppercase Y
90 132 5A 01011010 Z &#090; 大写字母 Z Uppercase Z
91 133 5B 01011011 [ &#091; 左中括号 Opening bracket
92 134 5C 01011100 &#092; 反斜杠 Backslash
93 135 5D 01011101 ] &#093; 右中括号 Closing bracket
94 136 5E 01011110 ^ &#094; 音调符号 Caret - circumflex
95 137 5F 01011111 _ &#095; 下划线 Underscore
96 140 60 01100000 ` &#096; 重音符 Grave accent
97 141 61 01100001 a &#097; 小写字母 a Lowercase a
98 142 62 01100010 b &#098; 小写字母 b Lowercase b
99 143 63 01100011 c &#099; 小写字母 c Lowercase c
100 144 64 01100100 d &#100; 小写字母 d Lowercase d
101 145 65 01100101 e &#101; 小写字母 e Lowercase e
102 146 66 01100110 f &#102; 小写字母 f Lowercase f
103 147 67 01100111 g &#103; 小写字母 g Lowercase g
104 150 68 01101000 h &#104; 小写字母 h Lowercase h
105 151 69 01101001 i &#105; 小写字母 i Lowercase i
106 152 6A 01101010 j &#106; 小写字母 j Lowercase j
107 153 6B 01101011 k &#107; 小写字母 k Lowercase k
108 154 6C 01101100 l &#108; 小写字母 l Lowercase l
109 155 6D 01101101 m &#109; 小写字母 m Lowercase m
110 156 6E 01101110 n &#110; 小写字母 n Lowercase n
111 157 6F 01101111 o &#111; 小写字母 o Lowercase o
112 160 70 01110000 p &#112; 小写字母 p Lowercase p
113 161 71 01110001 q &#113; 小写字母 q Lowercase q
114 162 72 01110010 r &#114; 小写字母 r Lowercase r
115 163 73 01110011 s &#115; 小写字母 s Lowercase s
116 164 74 01110100 t &#116; 小写字母 t Lowercase t
117 165 75 01110101 u &#117; 小写字母 u Lowercase u
118 166 76 01110110 v &#118; 小写字母 v Lowercase v
119 167 77 01110111 w &#119; 小写字母 w Lowercase w
120 170 78 01111000 x &#120; 小写字母 x Lowercase x
121 171 79 01111001 y &#121; 小写字母 y Lowercase y
122 172 7A 01111010 z &#122; 小写字母 z Lowercase z
123 173 7B 01111011 { &#123; 左大括号 Opening brace
124 174 7C 01111100 &#124; 垂直线
125 175 7D 01111101 } &#125; 右大括号 Closing brace
126 176 7E 01111110 ~ &#126; 波浪号 Equivalency sign - tilde
127 177 7F 01111111 &#127; 删除 Delete
ASCII扩展码 (字符编码: 128-255)

128个称为扩展ASCII码。许多基于x86的系统都支持使用扩展(或“高”)ASCII。扩展ASCII码允许将每个字符的第8 位用于确定附加的128 个特殊符号字符、外来语字母和图形符号。

十进制 DEC 八进制 OCT 十六进制 HEX 二进制 BIN 符号 Symbol HTML实体编码 中文解释 Description 英文解释 Description
128 200 80 10000000 &#128; 欧盟符号 Euro sign
129 201 81 10000001      
130 202 82 10000010 &#130; 单低 9 引号 Single low-9 quotation mark
131 203 83 10000011 ƒ &#131; 带钩的拉丁小写字母f Latin small letter f with hook
132 204 84 10000100 &#132; 双低 9 引号 Double low-9 quotation mark
133 205 85 10000101 &#133; 水平省略号 Horizontal ellipsis
134 206 86 10000110 &#134; 剑号 Dagger
135 207 87 10000111 &#135; 双剑号 Double dagger
136 210 88 10001000 ˆ &#136; 修正字符抑扬音符号 Modifier letter circumflex accent
137 211 89 10001001 &#137; 千分号 Per mille sign
138 212 8A 10001010 Š &#138; 带弯音号的拉丁大写字母 S Latin capital letter S with caron
139 213 8B 10001011 &#139; 左单书名号 Single left-pointing angle quotation
140 214 8C 10001100 Œ &#140; 拉丁大写组合 OE Latin capital ligature OE
141 215 8D 10001101      
142 216 8E 10001110 Ž &#142; 带弯音号的拉丁大写字母 z Latin capital letter Z with caron
143 217 8F 10001111      
144 220 90 10010000      
145 221 91 10010001 &#145; 左单引号 Left single quotation mark
146 222 92 10010010 &#146; 右单引号 Right single quotation mark
147 223 93 10010011 &#147; 左双引号 Left double quotation mark
148 224 94 10010100 &#148; 右双引号 Right double quotation mark
149 225 95 10010101 &#149;   Bullet
150 226 96 10010110 &#150; 半长破折号 En dash
151 227 97 10010111 &#151; 全长破折号 Em dash
152 230 98 10011000 ˜ &#152; 小波浪线 Small tilde
153 231 99 10011001 &#153;   Trade mark sign
154 232 9A 10011010 š &#154; 带弯音号的拉丁小写字母 s Latin small letter s with caron
155 233 9B 10011011 &#155; 右单书名号 Single right-pointing angle quotation mark
156 234 9C 10011100 œ &#156; 拉丁小写组合 oe Latin small ligature oe
157 235 9D 10011101      
158 236 9E 10011110 ž &#158; 带弯音号的拉丁小写字母 z Latin small letter z with caron
159 237 9F 10011111 Ÿ &#159; 带弯音号的拉丁大写字母 Y Latin capital letter Y with diaeresis
160 240 A0 10100000   &#160;   Non-breaking space
161 241 A1 10100001 ¡ &#161; 反向感叹号 Inverted exclamation mark
162 242 A2 10100010 ¢ &#162; 分币符号 Cent sign
163 243 A3 10100011 £ &#163; 英磅符号 Pound sign
164 244 A4 10100100 ¤ &#164;   Currency sign
165 245 A5 10100101 ¥ &#165; 人民币符号 Yen sign
166 246 A6 10100110 ¦ &#166;   Pipe, Broken vertical bar
167 247 A7 10100111 § &#167; 章节符号 Section sign
168 250 A8 10101000 ¨ &#168; 通用货币符号 Spacing diaeresis - umlaut
169 251 A9 10101001 © &#169; 版权符号 Copyright sign
170 252 AA 10101010 ª &#170; 阴性顺序指示符号 Feminine ordinal indicator
171 253 AB 10101011 « &#171; 左角引号 Left double angle quotes
172 254 AC 10101100 ¬ &#172;   Not sign
173 255 AD 10101101 ­ &#173;   Soft hyphen
174 256 AE 10101110 ® &#174;   Registered trade mark sign
175 257 AF 10101111 ¯ &#175;   Spacing macron - overline
176 260 B0 10110000 ° &#176; 温度符号 Degree sign
177 261 B1 10110001 ± &#177; 加/减号 Plus-or-minus sign
178 262 B2 10110010 ² &#178; 上标 2 Superscript two - squared
179 263 B3 10110011 ³ &#179; 上标 3 Superscript three - cubed
180 264 B4 10110100 ´ &#180;   Acute accent - spacing acute
181 265 B5 10110101 µ &#181; 微符号 Micro sign
182 266 B6 10110110 &#182; 段落符号,pilcrow Pilcrow sign - paragraph sign
183 267 B7 10110111 · &#183; 中点 Middle dot - Georgian comma
184 270 B8 10111000 ¸ &#184;   Spacing cedilla
185 271 B9 10111001 ¹ &#185; 上标 1 Superscript one
186 272 BA 10111010 º &#186; 阳性顺序指示符 Masculine ordinal indicator
187 273 BB 10111011 » &#187; 右角引号 Right double angle quotes
188 274 BC 10111100 ¼ &#188; 分数四分之一 Fraction one quarter
189 275 BD 10111101 ½ &#189; 分数二分之一 Fraction one half
190 276 BE 10111110 ¾ &#190;   Fraction three quarters
191 277 BF 10111111 ¿ &#191; 反向问号 Inverted question mark
192 300 C0 11000000 À &#192; 带重音符的大写字母 A Latin capital letter A with grave
193 301 C1 11000001 Á &#193; 带尖锐重音的大写字母 A Latin capital letter A with acute
194 302 C2 11000010 Â &#194; 带音调符号的大写字母 A Latin capital letter A with circumflex
195 303 C3 11000011 Ã &#195; 带代字号的大写字母 A Latin capital letter A with tilde
196 304 C4 11000100 Ä &#196; 带元音变音 (分音符号) 的大写字母 A Latin capital letter A with diaeresis
197 305 C5 11000101 Å &#197; 带铃声的大写字母 A Latin capital letter A with ring above
198 306 C6 11000110 Æ &#198; 大写字母 AE 双重元音 Latin capital letter AE
199 307 C7 11000111 Ç &#199; 带变音符号的大写字母 C Latin capital letter C with cedilla
200 310 C8 11001000 È &#200; 带重音符的大写字母 E Latin capital letter E with grave
201 311 C9 11001001 É &#201; 带尖锐重音的大写字母 E Latin capital letter E with acute
202 312 CA 11001010 Ê &#202; 带音调符号的大写字母 E Latin capital letter E with circumflex
203 313 CB 11001011 Ë &#203; 带元音变音 (分音符号) 的大写字母 E Latin capital letter E with diaeresis
204 314 CC 11001100 Ì &#204; 带重音符的大写字母 I Latin capital letter I with grave
205 315 CD 11001101 Í &#205; 带尖锐重音的大写字母 I Latin capital letter I with acute
206 316 CE 11001110 Î &#206; 带音调符号的大写字母 I Latin capital letter I with circumflex
207 317 CF 11001111 Ï &#207; 带元音变音 (分音符号) 的大写字母 I Latin capital letter I with diaeresis
208 320 D0 11010000 Ð &#208;   Latin capital letter ETH
209 321 D1 11010001 Ñ &#209; 带代字号的大写字母 N Latin capital letter N with tilde
210 322 D2 11010010 Ò &#210; 带重音符的大写字母 O Latin capital letter O with grave
211 323 D3 11010011 Ó &#211; 带尖锐重音的大写字母 O Latin capital letter O with acute
212 324 D4 11010100 Ô &#212; 带音调符号的大写字母 O Latin capital letter O with circumflex
213 325 D5 11010101 Õ &#213; 带代字号的大写字母 O Latin capital letter O with tilde
214 326 D6 11010110 Ö &#214; 带元音变音 (分音符号) 的大写字母 O Latin capital letter O with diaeresis
215 327 D7 11010111 × &#215; 大写字母 OE 连字 Multiplication sign
216 330 D8 11011000 Ø &#216; 带斜杠的大写字母 O Latin capital letter O with slash
217 331 D9 11011001 Ù &#217; 带重音符的大写字母 U Latin capital letter U with grave
218 332 DA 11011010 Ú &#218; 带尖锐重音的大写字母 U Latin capital letter U with acute
219 333 DB 11011011 Û &#219; 带音调符号的大写字母 U Latin capital letter U with circumflex
220 334 DC 11011100 Ü &#220; 带元音变音 (分音符号) 的大写字母 U Latin capital letter U with diaeresis
221 335 DD 11011101 Ý &#221; 带元音变音 (分音符号) 的大写字母 Y Latin capital letter Y with acute
222 336 DE 11011110 Þ &#222;   Latin capital letter THORN
223 337 DF 11011111 ß &#223; 德语高调小写字母 s Latin small letter sharp s - ess-zed
224 340 E0 11100000 à &#224; 带重音符的小写字母 a Latin small letter a with grave
225 341 E1 11100001 á &#225; 带尖锐重音的小写字母 a Latin small letter a with acute
226 342 E2 11100010 â &#226; 带音调符号的小写字母 a Latin small letter a with circumflex
227 343 E3 11100011 ã &#227; 带代字号的小写字母 a Latin small letter a with tilde
228 344 E4 11100100 ä &#228; 带元音变音 (分音符号) 的小写字母 a Latin small letter a with diaeresis
229 345 E5 11100101 å &#229; 带铃声的小写字母 a Latin small letter a with ring above
230 346 E6 11100110 æ &#230; 小写字母 ae 双重元音 Latin small letter ae
231 347 E7 11100111 ç &#231; 带变音符号的小写字母 c Latin small letter c with cedilla
232 350 E8 11101000 è &#232; 带重音符的小写字母 e Latin small letter e with grave
233 351 E9 11101001 é &#233; 带尖锐重音的小写字母 e Latin small letter e with acute
234 352 EA 11101010 ê &#234; 带音调符号的小写字母 e Latin small letter e with circumflex
235 353 EB 11101011 ë &#235; 带元音变音 (分音符号) 的小写字母 e Latin small letter e with diaeresis
236 354 EC 11101100 ì &#236; 带重音符的小写字母 i Latin small letter i with grave
237 355 ED 11101101 í &#237; 带尖锐重音的小写字母 i Latin small letter i with acute
238 356 EE 11101110 î &#238; 带音调符号的小写字母 i Latin small letter i with circumflex
239 357 EF 11101111 ï &#239; 带元音变音 (分音符号) 的小写字母 i Latin small letter i with diaeresis
240 360 F0 11110000 ð &#240;   Latin small letter eth
241 361 F1 11110001 ñ &#241; 带代字号的小写字母 n Latin small letter n with tilde
242 362 F2 11110010 ò &#242; 带重音符的小写字母 o Latin small letter o with grave
243 363 F3 11110011 ó &#243; 带尖锐重音的小写字母 o Latin small letter o with acute
244 364 F4 11110100 ô &#244; 带音调符号的小写字母 o Latin small letter o with circumflex
245 365 F5 11110101 õ &#245; 带代字号的小写字母 o Latin small letter o with tilde
246 366 F6 11110110 ö &#246; 带元音变音 (分音符号) 的小写字母 o Latin small letter o with diaeresis
247 367 F7 11110111 ÷ &#247; 小写字母 oe 连字 Division sign
248 370 F8 11111000 ø &#248; 带斜杠的小写字母 o Latin small letter o with slash
249 371 F9 11111001 ù &#249; 带重音符的小写字母 u Latin small letter u with grave
250 372 FA 11111010 ú &#250; 带尖锐重音的小写字母 u Latin small letter u with acute
251 373 FB 11111011 û &#251; 带音调符号的小写字母 u Latin small letter u with circumflex
252 374 FC 11111100 ü &#252; 带元音变音 (分音符号) 的小写字母 u Latin small letter u with diaeresis
253 375 FD 11111101 ý &#253; 带元音变音 (分音符号) 的小写字母 y2 Latin small letter y with acute
254 376 FE 11111110 þ &#254;   Latin small letter thorn
255 377 FF 11111111 ÿ &#255;   Latin small letter y with diaeresis

参考引用

posted @ 2022-03-15 18:04  VAllen  阅读(331)  评论(0编辑  收藏  举报