2013年11月2日 星期六

使用C#讀取健保卡基本資料

使用C#讀取健保卡基本資料


文章來源:

using System;
using System.Text;
using System.Runtime.InteropServices;

  class CitizenDigitalCertificateCardNoReader
  {   

    public struct SCARD_IO_REQUEST
    {
      public int dwProtocol;
      public int cbPciLength;
    }

    //引用 PC/SC(Personal Computer/Smart Card) API WinScard.dll
    [DllImport("WinScard.dll")] public static extern int SCardEstablishContext(uint dwScope,
      int nNotUsed1, int nNotUsed2, ref int phContext);
    [DllImport("WinScard.dll")] public static extern int SCardReleaseContext(int phContext);
    [DllImport("WinScard.dll")] public static extern int SCardConnect(int hContext, string cReaderName,
      uint dwShareMode, uint dwPrefProtocol, ref int phCard, ref int ActiveProtocol);
    [DllImport("WinScard.dll")] public static extern int SCardDisconnect(int hCard, int Disposition);
    [DllImport("WinScard.dll")] public static extern int SCardListReaders(int hContext, string cGroups,
      ref string cReaderLists, ref int nReaderCount);
    [DllImport("WinScard.dll")] public static extern int SCardTransmit(int hCard,
      ref SCARD_IO_REQUEST pioSendPci, byte[] pbSendBuffer, int cbSendLength,
      ref SCARD_IO_REQUEST pioRecvPci, ref byte pbRecvBuffer, ref int pcbRecvLength);

    static void Main(string[] args)
    {
      int ContextHandle = 0, CardHandle = 0, ActiveProtocol = 0, ReaderCount = -1;
      string ReaderList = string.Empty; //讀卡機名稱列表
      SCARD_IO_REQUEST SendPci, RecvPci;
      byte[] SelectAPDU = { 0x00, 0xA4, 0x04, 0x00, 0x10, 0xD1, 0x58, 0x00, 0x00, 0x01, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00 };
      byte[] ReadProfileAPDU = { 0x00, 0xca, 0x11, 0x00, 0x02, 0x00, 0x00 };
      byte[] SelectRecvBytes = new byte[2]; //應回 90 00
      int SelectRecvLength = 2;
      byte[] ProfileRecvBytes = new byte[59]; //接收Profile Byte Array
      int ProfileRecvLength = 59;

      //建立 Smart Card API
      if (SCardEstablishContext(0, 0, 0, ref ContextHandle) == 0)
        //列出可用的 Smart Card 讀卡機
        if (SCardListReaders(ContextHandle, nullref ReaderList, ref ReaderCount) == 0)
          //建立 Smart Card 連線
          if (SCardConnect(ContextHandle, ReaderList, 1, 2, ref CardHandle, ref ActiveProtocol) == 0)
          {
            SendPci.dwProtocol = RecvPci.dwProtocol = ActiveProtocol;
            SendPci.cbPciLength = RecvPci.cbPciLength = 8;
            //下達 Select Profile 檔的 APDU
            if (SCardTransmit(CardHandle, ref SendPci, SelectAPDU, SelectAPDU.Length,
              ref RecvPci, ref SelectRecvBytes[0], ref SelectRecvLength) == 0)
            //下達讀取Profile指令
            {
              if (SCardTransmit(CardHandle, ref SendPci, ReadProfileAPDU, ReadProfileAPDU.Length,
                ref RecvPci, ref ProfileRecvBytes[0], ref ProfileRecvLength) == 0)
                Console.WriteLine(
                  @"健保卡ID:{0}
                    姓名:{1}
                    身份証字號:{2}
                    生日:{3}/{4}/{5}
                    姓別:{6}
                    發卡日期:{7}/{8}/{9}",
                  Encoding.Default.GetString(ProfileRecvBytes, 0, 12),
                  Encoding.Default.GetString(ProfileRecvBytes, 12, 6),
                  Encoding.Default.GetString(ProfileRecvBytes, 32, 10),
                  Encoding.Default.GetString(ProfileRecvBytes, 43, 2),
                  Encoding.Default.GetString(ProfileRecvBytes, 45, 2),
                  Encoding.Default.GetString(ProfileRecvBytes, 47, 2),
                  Encoding.Default.GetString(ProfileRecvBytes, 49, 1),
                  Encoding.Default.GetString(ProfileRecvBytes, 51, 2),
                  Encoding.Default.GetString(ProfileRecvBytes, 53, 2),
                  Encoding.Default.GetString(ProfileRecvBytes, 55, 2)
                  );
            }
          }
      Console.ReadKey();
    }
  }

2013年3月27日 星期三

轉載-少棒愛無限

本篇文章 夢想我最大 賀寶芙 Herbalife 贊助台灣少棒~加油 引用自【酷麥克同名網誌

夢想我最大 賀寶芙 Herbalife 贊助台灣少棒~加油

你有多久沒有關注台灣的棒球運動,一次又一次的職棒簽賭案是不是讓你對台灣的棒球運動失去信心,雖然大家對職棒運動越來越冷漠,但是仍有在台灣的企業正莫莫的關懷著台灣的基層少棒運動,那就是賀寶芙 Herbalife,隨著將於今年4/13開打的賀寶芙少棒盃賽事,引起國內對於少棒賽的關注,如在賀寶芙少棒盃得獎的冠軍隊伍將有機會代表台灣進軍IBAF世界少棒錦標賽,出國為國爭光。

 

還記得小時候凌晨起來看國際棒球賽事為中華隊加油的盛況嗎?那時候起床看球蔚為全民運動,我想大家應該都記憶猶新吧,話說棒球曾為台灣國球,但台灣社會普遍對於體育不重視,以及社會眼光著重在升學教育上,也不重視孩子們的體育發展,喪失培養許多優秀棒球選手的機會,但隨著台灣之光王建民、郭泓志、陳偉殷等人在美國大聯盟大放異彩,你是不是開始相信打棒球也可以出人頭地呢?而重視棒球這件事,有個企業正默默的在耕耘,是的,那就是賀寶芙 HerbalifeHerbalife。

 

 

俗語說的好萬丈高樓平地起,凡事都必須先打好基礎,根基穩固了才能夠向上發展,賀寶芙 Herbalife 從2006年起持續贊助棒球運動,希望透過向下扎根,培養台灣之光的種子,期盼照顧好少棒隊球員,將來長大後才能為國爭光。

 

 

 

賀寶芙 Herbalife 從2011年開始贊助偏鄉少棒,目前已有4間小學:花蓮富源、台東卑南少棒隊、花蓮瑞穗及台東新生少棒隊,網路上有名的心碎弟邱皓翔,即是卑南國小體育班(柔道)選手,這些台灣之光的種子在賀寶芙 Herbalife 的贊助下開始成長茁壯萌芽,有著賀寶芙 Herbalife 的企業贊助,你是不是也開始對台灣的棒球有信心了呢?

 

 

 

一間好的企業必須展現他們的社會責任,賀寶芙 Herbalife 不吝嗇的投資這塊土地,提供小朋友們有更好的練習環境與硬體設備,讓他們可以無後顧之憂的努力比賽,能代表台灣參加IBAF世界少棒錦標賽,為台灣爭光,你是不是也願意用行動來支持台灣的棒球活動呢,如果有空的話,鼓勵這一些對棒球有熱忱的小朋友,讓他們可以有更多的資源完成夢想,抽空去觀看賀寶芙盃的少棒比賽比賽吧,為台灣小小選手加油,說不定下一個台灣之光就在裡面歐,快點起身支持台灣的國球吧!

 

 

 以上照片皆取自賀寶芙少棒盃官網:http://herbalifecup.pixnet.net/blog

2012年10月9日 星期二

TFS2012 Backup / Restore


關於TFS,最近在學習TFS相關的設定與架設。

我的作法如下:
1. 本機安裝TFS2012 Express , VS2010 sp1, TFS Explorer for vs2010, 最後還要裝一個
Visual Studio 2010 SP1 Team Foundation Server 2012 Compatibility GDR - 中文(繁體)

2. 為了怕本機掛點,所以安裝TFS2010 Power tools, 進行TFS的備份排程。
3. 備份好的資料,嘗試還原至其他的TFS。
........

反正一整個搞死就是了......革命尚未成功同志仍須努力。


本來想說用tfs2012 express 但沒想到說試用過期..........到底是花生甚麼事?

=================2012/10/10 慶祝國慶,終於在最後一個小時成功了==============

1. Power Tools 建立TFS備份
2. 將備份檔案移至要還原機的C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup下面,進行資料庫還原,還原有二


  1. Tfs_Configuration
  1. Tfs_DefaultCollection
3. 還原後,安裝TFS Express 2012,不要急著架設。照圖片步驟就完成了.....真是搞死人了!!!













2012年9月19日 星期三

昌吉街豬血湯


昌吉街 豬血湯


座落於台北市大同區昌吉街的知名豬血湯+大腸。看起來油,喝起來卻沒這麼油,味道真是不錯。

在與柏霖桑交接ASUS ZENBOOK之後,大快朵頤了一番。

2012年9月16日 星期日

得意豬腳

得意豬腳


大腹便便的老婆說要來吃就立刻殺來了!!!

吃就對了,不要管熱量

腿肉便當+竹筍湯

2012年9月15日 星期六

汐止圖書館

新的圖書館,都沒人跟我搶書,真好。

大多都是媽媽帶小朋友來,旁邊還有公園。

米麥義大利麵

平價好吃飲料隨餐附贈,還有小鬼陪伴。

汐止區新昌路46號