扫一扫直连WiFi二维码

厂区里,部署了N个WiFI点,每个点的SSID名称不同,密码也有不相同,当然密码符全密码策略,其中一些还是隐藏的SSID。
一直以来,需要的用户连接WiFi,得先知道SSID和密码。

现在想改进这种方式。用户连接WiFi无需再与IT咨询SSID与Password。
改用QR CODE让用户扫一扫直连。
互联网上很多在线创建WiFi QR Code的,为了方便自己工作,还是自己写一个吧。

创建二维码界面,先参考这个:
https://www.cnblogs.com/insus/p/13539139.html
并做出一个修改,如:
2026-07-30_14-49-51


上面的界页,一些数据需要准备:
安全类型,
2026-07-30_15-07-35

 public static DataTable Get_DataTable_WiFiEncryption()
 {
     DataTable dt = new DataTable("WiFiEncry");
     dt.Columns.Add("Type", typeof(String));
     dt.Columns.Add("Name", typeof(String));

     dt.Rows.Add("WPA", "WPA/WPA2");
     dt.Rows.Add("WEP", "WEP");
     dt.Rows.Add("nopass", "No Encryption");

     return dt;
 }
View Code

 

二维码前景色与背景色有所选择与输入,
2026-07-30_15-12-13

 

当用户选择By Name,用户可从下拉列表选择颜色:

[
  {
    "Name_EN": "LightPink",
    "Name_CN": "浅粉红",
    "HEX": "#FFB6C1",
    "DEC": "255,182,193"
  },
  {
    "Name_EN": "Pink",
    "Name_CN": "粉红",
    "HEX": "#FFC0CB",
    "DEC": "255,192,203"
  },
  {
    "Name_EN": "Crimson",
    "Name_CN": "深红(猩红)",
    "HEX": "#DC143C",
    "DEC": "220,20,60"
  },
  {
    "Name_EN": "LavenderBlush",
    "Name_CN": "淡紫红",
    "HEX": "#FFF0F5",
    "DEC": "255,240,245"
  },
  {
    "Name_EN": "PaleVioletRed",
    "Name_CN": "弱紫罗兰红",
    "HEX": "#DB7093",
    "DEC": "219,112,147"
  },
  {
    "Name_EN": "HotPink",
    "Name_CN": "热情的粉红",
    "HEX": "#FF69B4",
    "DEC": "255,105,180"
  },
  {
    "Name_EN": "DeepPink",
    "Name_CN": "深粉红",
    "HEX": "#FF1493",
    "DEC": "255,20,147"
  },
  {
    "Name_EN": "MediumVioletRed",
    "Name_CN": "中紫罗兰红",
    "HEX": "#C71585",
    "DEC": "199,21,133"
  },
  {
    "Name_EN": "Orchid",
    "Name_CN": "暗紫色(兰花紫)",
    "HEX": "#DA70D6",
    "DEC": "218,112,214"
  },
  {
    "Name_EN": "Thistle",
    "Name_CN": "蓟色",
    "HEX": "#D8BFD8",
    "DEC": "216,191,216"
  },
  {
    "Name_EN": "Plum",
    "Name_CN": "洋李色(李子紫)",
    "HEX": "#DDA0DD",
    "DEC": "221,160,221"
  },
  {
    "Name_EN": "Violet",
    "Name_CN": "紫罗兰",
    "HEX": "#EE82EE",
    "DEC": "238,130,238"
  },
  {
    "Name_EN": "Magenta",
    "Name_CN": "洋红(玫瑰红)",
    "HEX": "#FF00FF",
    "DEC": "255,0,255"
  },
  {
    "Name_EN": "Fuchsia",
    "Name_CN": "紫红(灯笼海棠)",
    "HEX": "#FF00FF",
    "DEC": "255,0,255"
  },
  {
    "Name_EN": "DarkMagenta",
    "Name_CN": "深洋红",
    "HEX": "#8B008B",
    "DEC": "139,0,139"
  },
  {
    "Name_EN": "Purple",
    "Name_CN": "紫色",
    "HEX": "#800080",
    "DEC": "128,0,128"
  },
  {
    "Name_EN": "MediumOrchid",
    "Name_CN": "中兰花紫",
    "HEX": "#BA55D3",
    "DEC": "186,85,211"
  },
  {
    "Name_EN": "DarkViolet",
    "Name_CN": "暗紫罗兰",
    "HEX": "#9400D3",
    "DEC": "148,0,211"
  },
  {
    "Name_EN": "DarkOrchid",
    "Name_CN": "暗兰花紫",
    "HEX": "#9932CC",
    "DEC": "153,50,204"
  },
  {
    "Name_EN": "Indigo",
    "Name_CN": "靛青/紫兰色",
    "HEX": "#4B0082",
    "DEC": "75,0,130"
  },
  {
    "Name_EN": "BlueViolet",
    "Name_CN": "蓝紫罗兰",
    "HEX": "#8A2BE2",
    "DEC": "138,43,226"
  },
  {
    "Name_EN": "MediumPurple",
    "Name_CN": "中紫色",
    "HEX": "#9370DB",
    "DEC": "147,112,219"
  },
  {
    "Name_EN": "MediumSlateBlue",
    "Name_CN": "中暗蓝色(中板岩蓝)",
    "HEX": "#7B68EE",
    "DEC": "123,104,238"
  },
  {
    "Name_EN": "SlateBlue",
    "Name_CN": "石蓝色(板岩蓝)",
    "HEX": "#6A5ACD",
    "DEC": "106,90,205"
  },
  {
    "Name_EN": "DarkSlateBlue",
    "Name_CN": "暗灰蓝色(暗板岩蓝)",
    "HEX": "#483D8B",
    "DEC": "72,61,139"
  },
  {
    "Name_EN": "Lavender",
    "Name_CN": "淡紫色(熏衣草淡紫)",
    "HEX": "#E6E6FA",
    "DEC": "230,230,250"
  },
  {
    "Name_EN": "GhostWhite",
    "Name_CN": "幽灵白",
    "HEX": "#F8F8FF",
    "DEC": "248,248,255"
  },
  {
    "Name_EN": "Blue",
    "Name_CN": "纯蓝",
    "HEX": "#0000FF",
    "DEC": "0,0,255"
  },
  {
    "Name_EN": "MediumBlue",
    "Name_CN": "中蓝色",
    "HEX": "#0000CD",
    "DEC": "0,0,205"
  },
  {
    "Name_EN": "MidnightBlue",
    "Name_CN": "午夜蓝",
    "HEX": "#191970",
    "DEC": "25,25,112"
  },
  {
    "Name_EN": "DarkBlue",
    "Name_CN": "暗蓝色",
    "HEX": "#00008B",
    "DEC": "0,0,139"
  },
  {
    "Name_EN": "Navy",
    "Name_CN": "海军蓝",
    "HEX": "#000080",
    "DEC": "0,0,128"
  },
  {
    "Name_EN": "RoyalBlue",
    "Name_CN": "皇家蓝/宝蓝",
    "HEX": "#4169E1",
    "DEC": "65,105,225"
  },
  {
    "Name_EN": "CornflowerBlue",
    "Name_CN": "矢车菊蓝",
    "HEX": "#6495ED",
    "DEC": "100,149,237"
  },
  {
    "Name_EN": "LightSteelBlue",
    "Name_CN": "亮钢蓝",
    "HEX": "#B0C4DE",
    "DEC": "176,196,222"
  },
  {
    "Name_EN": "LightSlateGray",
    "Name_CN": "亮蓝灰(亮石板灰)",
    "HEX": "#778899",
    "DEC": "119,136,153"
  },
  {
    "Name_EN": "SlateGray",
    "Name_CN": "灰石色(石板灰)",
    "HEX": "#708090",
    "DEC": "112,128,144"
  },
  {
    "Name_EN": "DodgerBlue",
    "Name_CN": "闪兰色(道奇蓝)",
    "HEX": "#1E90FF",
    "DEC": "30,144,255"
  },
  {
    "Name_EN": "AliceBlue",
    "Name_CN": "爱丽丝蓝",
    "HEX": "#F0F8FF",
    "DEC": "240,248,255"
  },
  {
    "Name_EN": "SteelBlue",
    "Name_CN": "钢蓝/铁青",
    "HEX": "#4682B4",
    "DEC": "70,130,180"
  },
  {
    "Name_EN": "LightSkyBlue",
    "Name_CN": "亮天蓝色",
    "HEX": "#87CEFA",
    "DEC": "135,206,250"
  },
  {
    "Name_EN": "SkyBlue",
    "Name_CN": "天蓝色",
    "HEX": "#87CEEB",
    "DEC": "135,206,235"
  },
  {
    "Name_EN": "DeepSkyBlue",
    "Name_CN": "深天蓝",
    "HEX": "#00BFFF",
    "DEC": "0,191,255"
  },
  {
    "Name_EN": "LightBlue",
    "Name_CN": "亮蓝",
    "HEX": "#ADD8E6",
    "DEC": "173,216,230"
  },
  {
    "Name_EN": "PowderBlue",
    "Name_CN": "粉蓝色(火药青)",
    "HEX": "#B0E0E6",
    "DEC": "176,224,230"
  },
  {
    "Name_EN": "CadetBlue",
    "Name_CN": "军兰色(军服蓝)",
    "HEX": "#5F9EA0",
    "DEC": "95,158,160"
  },
  {
    "Name_EN": "Azure",
    "Name_CN": "蔚蓝色",
    "HEX": "#F0FFFF",
    "DEC": "240,255,255"
  },
  {
    "Name_EN": "LightCyan",
    "Name_CN": "淡青色",
    "HEX": "#E0FFFF",
    "DEC": "224,255,255"
  },
  {
    "Name_EN": "PaleTurquoise",
    "Name_CN": "弱绿宝石",
    "HEX": "#AFEEEE",
    "DEC": "175,238,238"
  },
  {
    "Name_EN": "Cyan",
    "Name_CN": "青色",
    "HEX": "#00FFFF",
    "DEC": "0,255,255"
  },
  {
    "Name_EN": "Aqua",
    "Name_CN": "浅绿色(水色)",
    "HEX": "#00FFFF",
    "DEC": "0,255,255"
  },
  {
    "Name_EN": "DarkTurquoise",
    "Name_CN": "暗绿宝石",
    "HEX": "#00CED1",
    "DEC": "0,206,209"
  },
  {
    "Name_EN": "DarkSlateGray",
    "Name_CN": "暗瓦灰色(暗石板灰)",
    "HEX": "#2F4F4F",
    "DEC": "47,79,79"
  },
  {
    "Name_EN": "DarkCyan",
    "Name_CN": "暗青色",
    "HEX": "#008B8B",
    "DEC": "0,139,139"
  },
  {
    "Name_EN": "Teal",
    "Name_CN": "水鸭色",
    "HEX": "#008080",
    "DEC": "0,128,128"
  },
  {
    "Name_EN": "MediumTurquoise",
    "Name_CN": "中绿宝石",
    "HEX": "#48D1CC",
    "DEC": "72,209,204"
  },
  {
    "Name_EN": "LightSeaGreen",
    "Name_CN": "浅海洋绿",
    "HEX": "#20B2AA",
    "DEC": "32,178,170"
  },
  {
    "Name_EN": "Turquoise",
    "Name_CN": "绿宝石",
    "HEX": "#40E0D0",
    "DEC": "64,224,208"
  },
  {
    "Name_EN": "Aquamarine",
    "Name_CN": "宝石碧绿",
    "HEX": "#7FFFD4",
    "DEC": "127,255,212"
  },
  {
    "Name_EN": "MediumAquamarine",
    "Name_CN": "中宝石碧绿",
    "HEX": "#66CDAA",
    "DEC": "102,205,170"
  },
  {
    "Name_EN": "MediumSpringGreen",
    "Name_CN": "中春绿色",
    "HEX": "#00FA9A",
    "DEC": "0,250,154"
  },
  {
    "Name_EN": "MintCream",
    "Name_CN": "薄荷奶油",
    "HEX": "#F5FFFA",
    "DEC": "245,255,250"
  },
  {
    "Name_EN": "SpringGreen",
    "Name_CN": "春绿色",
    "HEX": "#00FF7F",
    "DEC": "0,255,127"
  },
  {
    "Name_EN": "MediumSeaGreen",
    "Name_CN": "中海洋绿",
    "HEX": "#3CB371",
    "DEC": "60,179,113"
  },
  {
    "Name_EN": "SeaGreen",
    "Name_CN": "海洋绿",
    "HEX": "#2E8B57",
    "DEC": "46,139,87"
  },
  {
    "Name_EN": "Honeydew",
    "Name_CN": "蜜色(蜜瓜色)",
    "HEX": "#F0FFF0",
    "DEC": "240,255,240"
  },
  {
    "Name_EN": "LightGreen",
    "Name_CN": "淡绿色",
    "HEX": "#90EE90",
    "DEC": "144,238,144"
  },
  {
    "Name_EN": "PaleGreen",
    "Name_CN": "弱绿色",
    "HEX": "#98FB98",
    "DEC": "152,251,152"
  },
  {
    "Name_EN": "DarkSeaGreen",
    "Name_CN": "暗海洋绿",
    "HEX": "#8FBC8F",
    "DEC": "143,188,143"
  },
  {
    "Name_EN": "LimeGreen",
    "Name_CN": "闪光深绿",
    "HEX": "#32CD32",
    "DEC": "50,205,50"
  },
  {
    "Name_EN": "Lime",
    "Name_CN": "闪光绿",
    "HEX": "#00FF00",
    "DEC": "0,255,0"
  },
  {
    "Name_EN": "ForestGreen",
    "Name_CN": "森林绿",
    "HEX": "#228B22",
    "DEC": "34,139,34"
  },
  {
    "Name_EN": "Green",
    "Name_CN": "纯绿",
    "HEX": "#008000",
    "DEC": "0,128,0"
  },
  {
    "Name_EN": "DarkGreen",
    "Name_CN": "暗绿色",
    "HEX": "#006400",
    "DEC": "0,100,0"
  },
  {
    "Name_EN": "Chartreuse",
    "Name_CN": "黄绿色(查特酒绿)",
    "HEX": "#7FFF00",
    "DEC": "127,255,0"
  },
  {
    "Name_EN": "LawnGreen",
    "Name_CN": "草绿色(草坪绿_",
    "HEX": "#7CFC00",
    "DEC": "124,252,0"
  },
  {
    "Name_EN": "GreenYellow",
    "Name_CN": "绿黄色",
    "HEX": "#ADFF2F",
    "DEC": "173,255,47"
  },
  {
    "Name_EN": "DarkOliveGreen",
    "Name_CN": "暗橄榄绿",
    "HEX": "#556B2F",
    "DEC": "85,107,47"
  },
  {
    "Name_EN": "YellowGreen",
    "Name_CN": "黄绿色",
    "HEX": "#9ACD32",
    "DEC": "154,205,50"
  },
  {
    "Name_EN": "OliveDrab",
    "Name_CN": "橄榄褐色",
    "HEX": "#6B8E23",
    "DEC": "107,142,35"
  },
  {
    "Name_EN": "Beige",
    "Name_CN": "米色/灰棕色",
    "HEX": "#F5F5DC",
    "DEC": "245,245,220"
  },
  {
    "Name_EN": "LightGoldenrodYellow",
    "Name_CN": "亮菊黄",
    "HEX": "#FAFAD2",
    "DEC": "250,250,210"
  },
  {
    "Name_EN": "Ivory",
    "Name_CN": "象牙色",
    "HEX": "#FFFFF0",
    "DEC": "255,255,240"
  },
  {
    "Name_EN": "LightYellow",
    "Name_CN": "浅黄色",
    "HEX": "#FFFFE0",
    "DEC": "255,255,224"
  },
  {
    "Name_EN": "Yellow",
    "Name_CN": "纯黄",
    "HEX": "#FFFF00",
    "DEC": "255,255,0"
  },
  {
    "Name_EN": "Olive",
    "Name_CN": "橄榄",
    "HEX": "#808000",
    "DEC": "128,128,0"
  },
  {
    "Name_EN": "DarkKhaki",
    "Name_CN": "暗黄褐色(深卡叽布)",
    "HEX": "#BDB76B",
    "DEC": "189,183,107"
  },
  {
    "Name_EN": "LemonChiffon",
    "Name_CN": "柠檬绸",
    "HEX": "#FFFACD",
    "DEC": "255,250,205"
  },
  {
    "Name_EN": "PaleGoldenrod",
    "Name_CN": "灰菊黄(苍麒麟色)",
    "HEX": "#EEE8AA",
    "DEC": "238,232,170"
  },
  {
    "Name_EN": "Khaki",
    "Name_CN": "黄褐色(卡叽布)",
    "HEX": "#F0E68C",
    "DEC": "240,230,140"
  },
  {
    "Name_EN": "Gold",
    "Name_CN": "金色",
    "HEX": "#FFD700",
    "DEC": "255,215,0"
  },
  {
    "Name_EN": "Cornsilk",
    "Name_CN": "玉米丝色",
    "HEX": "#FFF8DC",
    "DEC": "255,248,220"
  },
  {
    "Name_EN": "Goldenrod",
    "Name_CN": "金菊黄",
    "HEX": "#DAA520",
    "DEC": "218,165,32"
  },
  {
    "Name_EN": "DarkGoldenrod",
    "Name_CN": "暗金菊黄",
    "HEX": "#B8860B",
    "DEC": "184,134,11"
  },
  {
    "Name_EN": "FloralWhite",
    "Name_CN": "花的白色",
    "HEX": "#FFFAF0",
    "DEC": "255,250,240"
  },
  {
    "Name_EN": "OldLace",
    "Name_CN": "老花色(旧蕾丝)",
    "HEX": "#FDF5E6",
    "DEC": "253,245,230"
  },
  {
    "Name_EN": "Wheat",
    "Name_CN": "浅黄色(小麦色)",
    "HEX": "#F5DEB3",
    "DEC": "245,222,179"
  },
  {
    "Name_EN": "Moccasin",
    "Name_CN": "鹿皮色(鹿皮靴)",
    "HEX": "#FFE4B5",
    "DEC": "255,228,181"
  },
  {
    "Name_EN": "Orange",
    "Name_CN": "橙色",
    "HEX": "#FFA500",
    "DEC": "255,165,0"
  },
  {
    "Name_EN": "PapayaWhip",
    "Name_CN": "番木色(番木瓜)",
    "HEX": "#FFEFD5",
    "DEC": "255,239,213"
  },
  {
    "Name_EN": "BlanchedAlmond",
    "Name_CN": "白杏色",
    "HEX": "#FFEBCD",
    "DEC": "255,235,205"
  },
  {
    "Name_EN": "NavajoWhite",
    "Name_CN": "纳瓦白(土著白)",
    "HEX": "#FFDEAD",
    "DEC": "255,222,173"
  },
  {
    "Name_EN": "AntiqueWhite",
    "Name_CN": "古董白",
    "HEX": "#FAEBD7",
    "DEC": "250,235,215"
  },
  {
    "Name_EN": "Tan",
    "Name_CN": "茶色",
    "HEX": "#D2B48C",
    "DEC": "210,180,140"
  },
  {
    "Name_EN": "BurlyWood",
    "Name_CN": "硬木色",
    "HEX": "#DEB887",
    "DEC": "222,184,135"
  },
  {
    "Name_EN": "Bisque",
    "Name_CN": "陶坯黄",
    "HEX": "#FFE4C4",
    "DEC": "255,228,196"
  },
  {
    "Name_EN": "DarkOrange",
    "Name_CN": "深橙色",
    "HEX": "#FF8C00",
    "DEC": "255,140,0"
  },
  {
    "Name_EN": "Linen",
    "Name_CN": "亚麻布",
    "HEX": "#FAF0E6",
    "DEC": "250,240,230"
  },
  {
    "Name_EN": "Peru",
    "Name_CN": "秘鲁色",
    "HEX": "#CD853F",
    "DEC": "205,133,63"
  },
  {
    "Name_EN": "PeachPuff",
    "Name_CN": "桃肉色",
    "HEX": "#FFDAB9",
    "DEC": "255,218,185"
  },
  {
    "Name_EN": "SandyBrown",
    "Name_CN": "沙棕色",
    "HEX": "#F4A460",
    "DEC": "244,164,96"
  },
  {
    "Name_EN": "Chocolate",
    "Name_CN": "巧克力色",
    "HEX": "#D2691E",
    "DEC": "210,105,30"
  },
  {
    "Name_EN": "SaddleBrown",
    "Name_CN": "重褐色(马鞍棕色)",
    "HEX": "#8B4513",
    "DEC": "139,69,19"
  },
  {
    "Name_EN": "Seashell",
    "Name_CN": "海贝壳",
    "HEX": "#FFF5EE",
    "DEC": "255,245,238"
  },
  {
    "Name_EN": "Sienna",
    "Name_CN": "黄土赭色",
    "HEX": "#A0522D",
    "DEC": "160,82,45"
  },
  {
    "Name_EN": "LightSalmon",
    "Name_CN": "浅鲑鱼肉色",
    "HEX": "#FFA07A",
    "DEC": "255,160,122"
  },
  {
    "Name_EN": "Coral",
    "Name_CN": "珊瑚",
    "HEX": "#FF7F50",
    "DEC": "255,127,80"
  },
  {
    "Name_EN": "OrangeRed",
    "Name_CN": "橙红色",
    "HEX": "#FF4500",
    "DEC": "255,69,0"
  },
  {
    "Name_EN": "DarkSalmon",
    "Name_CN": "深鲜肉/鲑鱼色",
    "HEX": "#E9967A",
    "DEC": "233,150,122"
  },
  {
    "Name_EN": "Tomato",
    "Name_CN": "番茄红",
    "HEX": "#FF6347",
    "DEC": "255,99,71"
  },
  {
    "Name_EN": "MistyRose",
    "Name_CN": "浅玫瑰色(薄雾玫瑰)",
    "HEX": "#FFE4E1",
    "DEC": "255,228,225"
  },
  {
    "Name_EN": "Salmon",
    "Name_CN": "鲜肉/鲑鱼色",
    "HEX": "#FA8072",
    "DEC": "250,128,114"
  },
  {
    "Name_EN": "Snow",
    "Name_CN": "雪白色",
    "HEX": "#FFFAFA",
    "DEC": "255,250,250"
  },
  {
    "Name_EN": "LightCoral",
    "Name_CN": "淡珊瑚色",
    "HEX": "#F08080",
    "DEC": "240,128,128"
  },
  {
    "Name_EN": "RosyBrown",
    "Name_CN": "玫瑰棕色",
    "HEX": "#BC8F8F",
    "DEC": "188,143,143"
  },
  {
    "Name_EN": "IndianRed",
    "Name_CN": "印度红",
    "HEX": "#CD5C5C",
    "DEC": "205,92,92"
  },
  {
    "Name_EN": "Red",
    "Name_CN": "纯红",
    "HEX": "#FF0000",
    "DEC": "255,0,0"
  },
  {
    "Name_EN": "Brown",
    "Name_CN": "棕色",
    "HEX": "#A52A2A",
    "DEC": "165,42,42"
  },
  {
    "Name_EN": "FireBrick",
    "Name_CN": "火砖色(耐火砖)",
    "HEX": "#B22222",
    "DEC": "178,34,34"
  },
  {
    "Name_EN": "DarkRed",
    "Name_CN": "深红色",
    "HEX": "#8B0000",
    "DEC": "139,0,0"
  },
  {
    "Name_EN": "Maroon",
    "Name_CN": "栗色",
    "HEX": "#800000",
    "DEC": "128,0,0"
  },
  {
    "Name_EN": "White",
    "Name_CN": "纯白",
    "HEX": "#FFFFFF",
    "DEC": "255,255,255"
  },
  {
    "Name_EN": "WhiteSmoke",
    "Name_CN": "白烟",
    "HEX": "#F5F5F5",
    "DEC": "245,245,245"
  },
  {
    "Name_EN": "Gainsboro",
    "Name_CN": "淡灰色(庚斯博罗灰)",
    "HEX": "#DCDCDC",
    "DEC": "220,220,220"
  },
  {
    "Name_EN": "LightGrey",
    "Name_CN": "浅灰色",
    "HEX": "#D3D3D3",
    "DEC": "211,211,211"
  },
  {
    "Name_EN": "Silver",
    "Name_CN": "银灰色",
    "HEX": "#C0C0C0",
    "DEC": "192,192,192"
  },
  {
    "Name_EN": "DarkGray",
    "Name_CN": "深灰色",
    "HEX": "#A9A9A9",
    "DEC": "169,169,169"
  },
  {
    "Name_EN": "Gray",
    "Name_CN": "灰色",
    "HEX": "#808080",
    "DEC": "128,128,128"
  },
  {
    "Name_EN": "DimGray",
    "Name_CN": "暗淡的灰色",
    "HEX": "#696969",
    "DEC": "105,105,105"
  },
  {
    "Name_EN": "Black",
    "Name_CN": "纯黑",
    "HEX": "#000000",
    "DEC": "0,0,0"
  }
]
View Code

 

二维码版本,共有40个版本,每个版本对应不同的矩阵大小和数据存储容量。
2026-07-30_15-21-11

QR码
版本从Version 1(21x21矩阵)到Version 40(177x177矩阵),每增加一个版本,矩阵的边长增加4个模块。

版本与矩阵大小
    Version 1: 21x21矩阵。
    Version 2: 25x25矩阵。
    Version 40: 177x177矩阵。
    矩阵大小公式为:(V-1)*4 + 21,其中V为版本号。
数据存储容量
QR码支持多种数据类型,包括数字、字母、二进制和汉字。不同版本和纠错级别下的容量如下:
    数字: 最多7089字符。
    字母数字: 最多4296字符。
    二进制(8位字节): 最多2953字节。
    汉字(UTF-8编码): 最多984字符。


最后准备容错等维级,四种纠错级别,容错能力越高,存储容量越低
2026-07-30_15-27-11

容错率是指在二维码部分损坏或遮挡的情况下,仍然能够被正确识别的能力。这种能力通过纠错级别(Error Correction Level, ECL),主要依赖于Reed-Solomon误差纠正算法,通过增加冗余码字来恢复丢失的信息。
每档对应不同的容错能力和数据容量:
    L级适合对数据容量需求较高但容错要求较低的场景。
    M级是常用的平衡选项。
    Q级适用于对可靠性要求较高的应用。
    H级适合在恶劣环境下使用。
提高纠错级别会增强抗损坏能力,但会减少可存储的数据量。
例如你生成版本2的二维码中,L级可存储约44个数字字符,而H级仅能存储约17个数字字符。


接下来,我们实现C#相关程序,先创建WiFi.cs类,

namespace Insus.NET
{
    public class WiFi
    {
        
        public String Ssid { get;  set; }
        
        public String NetworkEncryption { get;  set; }
       
        public String Password { get;  set; }
       
        public bool Hidden { get;  set; }
    }
}

 

生成的二维码,用户扫一扫能连上WiFi。二维码内容语法:
WIFI:T:XXX;S:XXX;P:XXX;; 
T代表加密方式 S代表你的wifi名称 P代表密码,中间以分号隔开,最后两个分号代表结束,全部明文。

.再创建一个WiFi 实体类,如QrWiFi.cs
2026-07-31_08-16-35

 

 上面实体类中,还有几个扩展方法:
2026-07-31_08-23-28

public static string EscapeInput(string inp, bool simple = false)
{
    char[] forbiddenChars = { '\\', ';', ',', ':' };
    if (simple)
    {
        forbiddenChars = new char[1] { ':' };
    }
    foreach (var c in forbiddenChars)
    {
        inp = inp.Replace(c.ToString(), "\\" + c);
    }
    return inp;
}

public static bool IsHexStyle(string inp)
{
    return Regex.IsMatch(inp, @"\A\b[0-9a-fA-F]+\b\Z") || Regex.IsMatch(inp, @"\A\b(0[xX])?[0-9a-fA-F]+\b\Z");
}
View Code

 
最后,创建一个QR类,

namespace Insus.NET
{
    public class Qr
    {
        public string BackgroundColor { get; set; } = "#FFFFFF";

        public string ForegroundColor { get; set; } = "#000000";

        public int Width { get; set; } = 200;

        public int Height { get; set; } = 200;

        public string CHARACTER_SET { get; set; } = "UTF-8";

        public int MARGIN { get; set; } = 4;

        public int Version { get; set; } = 5;

        public string ERROR_CORRECTION { get; set; } = ErrorCorrectionLevel.M.ToString();

        public string Format { get; set; } = BarcodeFormat.QR_CODE.ToString();

        public int QuietZone { get; set; } = 1;

        public string Content { get; set; }

        public string LogoPhysicalPath { get; set; } = string.Empty;
    }
}

 

类中,一些属性有设置默认值。即是说当端调用时,没有传入任何值时,使用设置的默认值。
前景色为黑色,背景色为白色。
认别字符集CHARACTER_SET为UTF-8。
留白边界为4,版本为5。
纠错等级为M。
二维码格式为BarcodeFormat.QR_CODE。

最后一个属性LogoPhysicalPath,这是二维码显示标志的物理路径。

在完成QrEntity类前,还需要写2个私有方法,方便QrEntity类好调用。

渲染二维码,
2026-07-31_09-52-43

 private BitMatrix RenderResult(BitMatrix matrix, int width, int height, int quietZone)
 {
     int inputWidth = matrix.Width;
     int inputHeight = matrix.Height;
     int qrWidth = inputWidth + (quietZone * 2); //int qrWidth = inputWidth + (quietZone << 1);
     int qrHeight = inputHeight + (quietZone * 2); //(int qrHeight = inputHeight +quietZone << 1);         
     int outputWidth = Math.Max(width, qrWidth);
     int outputHeight = Math.Max(height, qrHeight);

     int multiple = Math.Min(outputWidth / qrWidth, outputHeight / qrHeight);

     int leftPadding = (outputWidth - (inputWidth * multiple)) / 2;
     int topPadding = (outputHeight - (inputHeight * multiple)) / 2;

     BitMatrix output = new BitMatrix(outputWidth, outputHeight);

     for (int inputY = 0, outputY = topPadding; inputY < inputHeight; inputY++, outputY += multiple)
     {
         for (int inputX = 0, outputX = leftPadding; inputX < inputWidth; inputX++, outputX += multiple)
         {
             if (matrix[inputX, inputY])
             {
                 output.setRegion(outputX, outputY, multiple, multiple);
             }
         }
     }

     return output;
 }
View Code

 

处理二维码标志,
2026-07-31_10-35-46

 

private void ProcessQRCodeLogo(Bitmap bitmap, Qr qr, Color brushColor)
{
    // 处理 Logo
    using (Graphics g = Graphics.FromImage(bitmap))
    {
        if (!string.IsNullOrEmpty(qr.LogoPhysicalPath) && System.IO.File.Exists(qr.LogoPhysicalPath))
        {
            int logoSize = (int)(qr.Width * 0.2);
            int padding = (int)(logoSize * 0.05);
            int totalClear = logoSize + 2 * padding;
            int clearX = (qr.Width - totalClear) / 2;
            int clearY = (qr.Height - totalClear) / 2;

            // 挖掉中心区域,用来存放QR Code Logo
            using (SolidBrush bgBrush = new SolidBrush(brushColor))
            {
                g.FillRectangle(bgBrush, clearX, clearY, totalClear, totalClear);
            }

            // 画QR Code Logo
            int logoX = clearX + padding;
            int logoY = clearY + padding;
            using (Bitmap logo = new Bitmap(qr.LogoPhysicalPath))
            {
                g.DrawImage(logo, new Rectangle(logoX, logoY, logoSize, logoSize));
            }
        }
    }
}
View Code


在处理标志过程中,可以看到以下代码,

!string.IsNullOrEmpty(qr.LogoPhysicalPath) && System.IO.File.Exists(qr.LogoPhysicalPath)


传入的路径参数不能空,而标志物理路径真实存在。不然它会略过标志呈现。


完整QrEntity类,
2026-07-31_10-45-37

public Bitmap GeneratorQrCodeBitmap(Qr qr)
{
    if (string.IsNullOrEmpty(qr.Content) || qr.Width < 0 || qr.Height < 0)
    {
        return null;
    }

    MultiFormatWriter writer = new MultiFormatWriter();

    var ecl = qr.ERROR_CORRECTION.ToErrorCorrectionLevel();

    var format = qr.Format.ToEnum<BarcodeFormat>(BarcodeFormat.QR_CODE);//这里也写死了,应该接收前端传入的参数。

    IDictionary<EncodeHintType, object> hints = new Dictionary<EncodeHintType, object>();
    hints.Add(EncodeHintType.CHARACTER_SET, qr.CHARACTER_SET);
    hints.Add(EncodeHintType.ERROR_CORRECTION, ecl);
    hints.Add(EncodeHintType.MARGIN, qr.MARGIN);
    hints.Add(EncodeHintType.QR_VERSION, qr.Version);

    BitMatrix matrix = writer.encode(qr.Content, format, qr.Width, qr.Height, hints);

    RenderResult(matrix, qr.Width, qr.Height, qr.QuietZone);

    Bitmap bitmap = new Bitmap(qr.Width, qr.Height, PixelFormat.Format32bppArgb);

    Color foreColor = QrUtil.ColorParse(qr.ForegroundColor);
    Color backColor = QrUtil.ColorParse(qr.BackgroundColor);

    // 绘制像素
    for (int x = 0; x < qr.Width; x++)
    {
        for (int y = 0; y < qr.Height; y++)
        {
            bitmap.SetPixel(x, y, matrix[x, y] ? foreColor : backColor);
        }
    }

    //这里Insus.NET把它写死了,你应该把它能让前端在调用时,可以设置透明序,0-255之间。
    Color brushColor = Color.FromArgb(255, backColor);
    ProcessQRCodeLogo(bitmap, qr, brushColor);

    return bitmap;
}
View Code

 

程序运行,效果:
2026-07-31_13-12-50


WiFi配置为隐藏SSID。创建WiFi 二维码时,同城选择隐藏网络选项。
用户扫一扫时,自动会连接到隐藏的WiFi。
当二维码嵌入标志时,建议纠错等级为H。
WiFi安全类型,主要包括:
WEP(Wired Equivalent Privacy)、WPA(Wi-Fi Protected Access)、WPA2(Wi-Fi Protected Access II)和WPA3(Wi-Fi Protected Access III),
其中WPA3是目前最安全的标准。上面代码示例中,并未包括WPA3。





 

posted @ 2026-07-31 13:45  Insus.NET  阅读(7)  评论(0)    收藏  举报