.Net 生成二维码 名片实现



主要是用于公司的通讯录上,这样可以方便有装有二维码扫描软件的智能手机直接添加名片,以避免手工输入的麻烦.





实现步骤:

引用dll




using ThoughtWorks.QRCode.Codec;
using ThoughtWorks.QRCode.Codec.Data;
using ThoughtWorks.QRCode.Codec.Util;


需要了解的知识:

vcard规范

vCard 规范容许公开交换个人数据交换 (Personal Data Interchange PDI) 信息,在传统纸质商业名片可找到这些信息。规范定义电子名片(或叫vCard)的格式。 vCard 规范可作为各种应用或系统之间的交换格式。定义的格式与传送的方法无关。传送交换可能是文件系统,点对点交换的公共电话网络,以有线网络或无线传送的方式。用户能在互联网上直接利用vCard。电子邮件能转发在vCard中人信息。网页上很多用户填写的表格可自动使用vCard。

百度百科:http://baike.baidu.com/view/495045.htm


代码实现核心部分


//生成二维码名片//

                    StringBuilder Vcard = new StringBuilder();

                    Vcard.Append("BEGIN:VCARD");
                    Vcard.Append("N:").Append("您的姓名").Append(";").Append(lblTrueName.Text).Append(";");
                    Vcard.Append("FN:").Append("您的姓名").Append(";");
                    Vcard.Append("ORG:").Append("公司名称").Append(";");
                    Vcard.Append("TEL;WORK;VOICE:").Append("手机号码").Append(";");
                    Vcard.Append("TEL;HOME;VOICE:").Append("分机号码").Append(";");
                    //Vcard.Append("LABEL;TYPE=WORK:").Append("公司地址").Append(";").Append("523860").Append("中国").Append(";");
                    //Vcard.Append("EMAIL:").Append(objUserBasic.CompanyEmail).Append(";");
                    Vcard.Append("END:VCARD");
                    //结束

                    this.imgMakeQR.ImageUrl = "chart.ashx?chl="+Server.HtmlEncode(Vcard.ToString())+"&size=4";



不支持中文的解决办法:

方法1:需要对所生成的内容作Server.HtmlEncode()处理

方法2:

因为ascii编码当中的最大为127,这样判断后,就能正确的判断是不是unicode,这样就能正确的解码中文了.其中注释掉的是原本的代码。


public static bool IsUnicode(byte[] byteData)
        {
            //string value1 = FromASCIIByteArray(byteData);
            //string value2 = FromUnicodeByteArray(byteData);
            //byte[] ascii = AsciiStringToByteArray(value1);
            //byte[] unicode = UnicodeStringToByteArray(value2);
            //if (ascii[0] != unicode[0])
            //    return true;
            //return false;
            bool isUnicode = false;
            foreach (byte value in byteData)
            {
                if (value > 128)
                {
                    isUnicode =  true;
                    break;
                }
              
            
            }
            return isUnicode;//返回是不是Unicode编码
        }




参考样例




一点经验,与大家分享,欢迎指正!


[本日志由 admin 于 2013-01-21 05:44 PM 更新]
上一篇: Asp.Net 集成RTX(腾讯通)开发实践
下一篇: 《不说,就真来不及了》读后感
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: 生成二维码 二维码 二维码名片
相关日志:
评论: 3 | 引用: 0 | 查看次数: 10359
TOM[2015-07-08 02:18 PM | | Mail To:hhqqnu@163.com | 112.65.213.146 | del | 取消审核 | 回复回复]
兄弟源码不全呀,是否给一个全的,谢谢。
hhqqnu@163.com
laoying[2013-04-28 04:10 PM | 访问 http://www.dezai.cn/blog/article.asp?id=480 | Mail To:laoyingat@163.com | 60.247.108.226 | del | 取消审核 | 回复回复]
请问方法2的代码应该放到哪里?能给个完整的源码吗?多谢!
回复来自 admin 的评论 admin 于 2013-05-02 02:56 PM 回复
源码就是上面的。放在你要生二维码的那个页面
圣王最新章节[2013-01-29 11:53 PM | 访问 http://www.016k.com/shengwang/ | Mail To:g1nrbccm@expressemail.org | 222.242.227.66 | del | 取消审核 | 回复回复]
强中自有强中强!遭遇强者啦!好文才!
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 30 字 | UBB代码 关闭 | [img]标签 关闭