a0fzide / thai-smartcard-nodejs

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Thai Smartcard Reader with Node.js

Nodejs application read personal and nhso data from thai id card, it run in the background and wait until inserted card then send readed data to everyone via socket.io.

Other Version

Installation

Windows

  • Install Nodejs with nvm-windows (use node 14.15)
    nvm install 14.15
    nvm use 14.15
  • Start PowerShell as Administrator and run: npm install --global --production windows-build-tools, or use option 2 in https://github.com/nodejs/node-gyp#on-windows
  • Go to thai-smartcard-nodejs and run npm install
  • Setup PM2
    npm install -g pm2 pm2-windows-startup
    pm2-startup install
    pm2 start src/index.js --name smc
    pm2 save

Ubuntu & Pi

  • Install Python 2.7.x
  • Run $ sudo apt-get install libpcsclite1 libpcsclite-dev pcscd
  • Install Nodejs with nvm (use node 14.15)
    nvm install 14.15
    nvm use 14.15
  • Go to thai-smartcard-nodejs and run npm install
  • Setup PM2
    npm install -g pm2
    pm2 start src/index.js --name smc
    pm2 startup
    pm2 save

Mac

# 1. Install NVM
brew install nvm

# 2. Create a directory for NVM
mkdir ~/.nvm

# 3. add these lines to ~/.bash_profile ( or ~/.zshrc for macOS Catalina or later)
export NVM_DIR=~/.nvm
source $(brew --prefix nvm)/nvm.sh

# 4. Reload Config
source ~/.bash_profile (or source ~/.zshrc)

# 5. Test
nvm -v
  • Install Nodejs with [nvm]
nvm install 14.15
nvm use 14.15
  • Go to thai-smartcard-nodejs and run npm install
  • Setup PM2
npm install -g pm2
pm2 start src/index.js --name smc
pm2 startup
pm2 save

Change Server Port

  • Default port is 9898, change by set system environment SMC_AGENT_PORT.

Example

Client connect with socket.io

<script>
  const socket = io.connect('http://localhost:9898');
  socket.on('connect', function () {
    /**
    * Select field to read from smart card
    * Available fields: 'cid', 'name', 'nameEn', 'dob', 'gender', 'issuer', 'issueDate', 'expireDate', 'address', 'photo', 'nhso', 'laserId'
    */
    socket.emit('set-query', {
      query: ['cid', 'name']
    });

    // Or set select all fields.
    // socket.emit('set-all-query');
  });
  socket.on('smc-data', function (data) {
    console.log(data);
  });
  socket.on('smc-error', function (data) {
    console.log(data);
  });
  socket.on('smc-removed', function (data) {
    console.log(data);
  });
  socket.on('smc-deactivated', function (data) {
    console.log(data);
  });
  socket.on('smc-incorrect', function (data) {
      console.log(data);
  });
  socket.on('smc-inserted', function (data) {
    console.log(data);
  });
</script>

Donate

สนับสนุนได้ผ่านทาง Promptpay

About


Languages

Language:JavaScript 93.9%Language:HTML 6.1%