扫一扫直连WiFi二维码
厂区里,部署了N个WiFI点,每个点的SSID名称不同,密码也有不相同,当然密码符全密码策略,其中一些还是隐藏的SSID。
一直以来,需要的用户连接WiFi,得先知道SSID和密码。
现在想改进这种方式。用户连接WiFi无需再与IT咨询SSID与Password。
改用QR CODE让用户扫一扫直连。
互联网上很多在线创建WiFi QR Code的,为了方便自己工作,还是自己写一个吧。
创建二维码界面,先参考这个:
https://www.cnblogs.com/insus/p/13539139.html
并做出一个修改,如:
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; }
当用户选择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"
}
]
二维码版本,共有40个版本,每个版本对应不同的矩阵大小和数据存储容量。
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字符。
最后准备容错等维级,四种纠错级别,容错能力越高,存储容量越低。
容错率是指在二维码部分损坏或遮挡的情况下,仍然能够被正确识别的能力。这种能力通过纠错级别(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
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"); }
最后,创建一个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类好调用。
渲染二维码,
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; }
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)); } } } }
在处理标志过程中,可以看到以下代码,
!string.IsNullOrEmpty(qr.LogoPhysicalPath) && System.IO.File.Exists(qr.LogoPhysicalPath)
传入的路径参数不能空,而标志物理路径真实存在。不然它会略过标志呈现。
完整QrEntity类,
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; }
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。






浙公网安备 33010602011771号