npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

react-magstripe

v1.0.1

Published

A react component for reading magstrip data from a USB mag strip like the MSR90 via the virtual keyboard and calling back with card data

Downloads

23

Readme

react-magstripe

A react component for reading magstripe data from a USB mag strip like the MSR90 via the virtual keyboard and calling back with card data.

The parser for this component follows the ISO7813 format, but not strictly. In the real world, we see cards loosely following this format, with lots of flipping of first / last names, and leaving data like security codes out. Sometimes some fields are completely missing. As a minimum, for processers like Stripe you'll need card_number, first_name and last_name.

The way the component works; it is mounted on a page in a browser window that is active in the operation system you're working on. You then plug in the physical magstripe reader. Most, like the MSR90, act like a virtual keyboard, so this component is just reading from keydown data coming in from the virtual keyboar. This typically included lots of keys like Shift that we don't care about and <MagStripe /> filters out for you. The result is clean, filtered, formatted data. If you are using another magstripe reader and get lots of junk, create a github issue or PR and those keys will be added to the filter.

The most likely application for this component is a kiosk style browser application running on a captive version of an operating system like Linux. If you have issues in that environment with this component, verify that plain keyboard key presses register with <MagStripe />; if not, then your browser window hosting the page is not active in the operating system foreground. Such issues are out of scope here, but we've built many systems in this environment using <MagStripe /> and haven't had many issues.

I've open sourced this component as an attempt to help others, and to find better parsing rules to get more card data to work. Please share example data of cards that don't work! (Redact actual card numbers of course.) And please PR and fixes you'd like to see added.

Install

npm install react-magstripe

Usage

import MagStripe from "react-magstripe";

<MagStripe onComplete={data => console.log(data)} />

Example data from onComplete callback:

{
  card_number: '4242424242424242',
  last_name: 'BLAIR',
  first_name: 'COLBY',
  YY: '23',
  MM: '01',
  service_code: '',
  discretionary_data: ''
}