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